我剛開始在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規則看起來很明智,並且與其他模塊的規則沒有區別。
我不知道這是如何可能的。也許我錯過了明顯的東西。有任何想法嗎?
更新: 使用系統監視器我可以確認正在運行的進程使用預期的可執行。
是否通過INCLUDEPATH指令找到標題?然後檢查你是否遇到了這個問題:http://stackoverflow.com/questions/5470438/why-are-changes-in-source-not-always-reflected-in-machine-code-after-build-while(否則添加你的.pro文件) –
爲什麼-1?請解釋。 – Silicomancer
@Frank:這不適用於我的情況。我的頭文件在INCLUDEPATH中沒有明確提到的項目根目錄中。然而,編輯.pro文件(不需要改變任何東西!)似乎已經以某種方式解決了這個問題。不知道爲什麼。我會觀察行爲。 – Silicomancer