2015-12-24 56 views
0

我剛開始在Kubuntu 15.10上使用Qt Creator 3.5.0,Qt 5.4.2和GCC。我創建了一個新項目,添加了一個窗口,目前我正在開發一個新模塊。代碼更改不生效

然而奇怪的事情發生。

我寫在我的模板類X的調試輸出線的線位於X類的功能在其模塊的頭部,如:

qDebug() << "Hello1" << endl; 

構建和運行應用程序在這一行以後並根據需要在調試控制檯中打印「Hello1」。此外,我可以使用調試器,並通過線路。當編譯應用程序時,編譯器基本上不做任何事情,因爲沒有代碼文件被改變(如預期的那樣)

編輯當上述線路事情weired:

  • 我改了行,以「Hello2」並保存代碼文件。
  • 我可以看到源文件正確更新的文件修改日期/時間,並且證實該文件比相應的目標文件更新。
  • 構建項目時,編譯器實際編譯編輯後的源文件並按預期鏈接應用程序。我驗證了更新的目標文件日期/時間和更新可執行文件的日期/時間。
  • 但是,當啓動應用程序的行爲並沒有改變!輸出仍然是「Hello1」。
  • 當使用二進制編輯器搜索可執行文件時,我仍然只能看到舊字符串「Hello1」。沒有其他包含「你好」的字符串。
  • 再次完成上述操作後(將行更改爲「Hello3」)仍會打印「Hello1」。

更多的事實:

  • 重樓整個應用程序或清潔項目後更改生效單一時間當。
  • 每次編輯時都會重現問題。
  • 我無法觀察這與任何其他模塊,它只發生在一個源模塊似乎沒有顯着不同。
  • 如前所述,代碼行位於模塊頭部。但修改模塊本身不會改變任何內容。
  • 在同一時間更改類X和第二個模塊不會改變任何內容(第二個模塊中的修改生效,類X中的修改不起作用)。
  • 標題和模塊都正確添加到.pro文件。
  • 重新啓動QtCreator不會改變任何東西。
  • 這是在沒有調試器的情況下發生的。
  • 類X模塊的Makefile規則看起來很明智,並且與其他模塊的規則沒有區別。

我不知道這是如何可能的。也許我錯過了明顯的東西。有任何想法嗎?

更新: 使用系統監視器我可以確認正在運行的進程使用預期的可執行。

+0

是否通過INCLUDEPATH指令找到標題?然後檢查你是否遇到了這個問題:http://stackoverflow.com/questions/5470438/why-are-changes-in-source-not-always-reflected-in-machine-code-after-build-while(否則添加你的.pro文件) –

+0

爲什麼-1?請解釋。 – Silicomancer

+0

@Frank:這不適用於我的情況。我的頭文件在INCLUDEPATH中沒有明確提到的項目根目錄中。然而,編輯.pro文件(不需要改變任何東西!)似乎已經以某種方式解決了這個問題。不知道爲什麼。我會觀察行爲。 – Silicomancer

回答

1

檢查哪個exe調試器實際運行。這可能是另一個副本!查看進程列表,以確定知道調試器下的EXE。

這個一般問題在我個人的經歷中出於各種原因而發生。文件被複制到安裝/暫存區域;環境影響事物;錯誤的項目設置爲「啓動」;開始調試會話時組件運行的方式最終會解決錯誤的文件;錯誤的配置或味道正在改變;等等。

規則1:驗證你的假設。你檢查文件日期等,但增加檢查什麼文件(完整路徑)實際上是在調試器下。

+0

好主意。剛剛檢查。可執行的是正確的。看我的udapte。 – Silicomancer

1

你可以嘗試一些事情:

  1. 確認您是否爲創建一個相同的路徑上打開它(你可以驗證它尋找到.pro.user文件exe文件
  2. 檢查。在編譯時,它首先保存更改,然後編譯它,否則一起,它可能看起來它,但不知道。
  3. 如果你已經改變了你的.pro文件運行的qmake並重新構建它。
  4. 嘗試清潔,運行qmake並重新構建項目。
  5. 如果您更改了.pro文件,或者您正在包含外部庫或文件,請檢查輸出日誌以查看一切是否正常,有時它不是,但仍然編譯(然後鏈接不好或只是讓您舊的編譯版本)。

它似乎在編譯你的代碼的最後'版本',而不是爲了某些原因和其他原因而應用這些更改(如果我認爲在其他事情中我會稍後編輯該帖子)。

希望它有幫助

+0

Exe是一樣的。我手動保存,所以保存之前發生。但是,似乎編輯.pro文件(不更改任何內容)修復了該行爲。希望這是永久的。無論如何,這很奇怪。 – Silicomancer