2016-04-30 62 views
2

幾乎每隔一段時間,我(重新)編譯一些C(或C++)的文件我的工作 - 它的方式成功,沒有任何警告 - 然後我只執行我的計劃實現,由於我以前一切都沒有改變彙編。爲了簡單起見,我們假設我向我的源添加了一條指令,將一些調試信息打印到屏幕上,以便我看到麻煩的直觀證據:事實上,我編譯,執行並意外地沒有任何內容被打印到屏幕上。你如何確定你正在運行最新的可執行文件?

這發生在我曾經當我有一個bug的代碼(我跑出一個靜態數組的邊界)。當然,如果你的代碼有某種隱藏錯誤(What are all the common undefined behaviours that a C++ programmer should know about?)的編譯代碼可以是相當多的東西。

這事我兩次,當我使用了一些可笑的速度較慢的網絡硬盤驅動器上 - 我猜 - 壓根兒不更新編譯後,我的可執行文件,我不停地奔跑和運行舊版本,儘管更新的來源。我只是在這裏推測,並隨時糾正我,如果這種現象是不可能的,但我懷疑它必須採取某些進程waiting for IO。當你在錯誤的目錄(即:執行類似的,但實際上完全與你的源無關)執行舊版本時,當然可能發生這樣的事情(而且他們確實這樣做)。

它再次發生,這讓我很煩足夠問:你如何確保你的可執行文件匹配您正在使用的來源是什麼?我應該比較源代碼和主函數中可執行文件的日期字符串嗎?我應該在編譯前刪除可執行文件嗎?我想人們可能會通過version control做類似的事情。


注:我被警告說,這可能是一個主觀話題可能註定要被關閉。

+0

我編譯和一個命令,即'讓^ h運行oge &&。/ hoge',但這並不妨礙我編譯時不保存編輯器上編輯的內容。 – MikeCAT

+0

事實上,忘記保存源文件是此類問題的另一個來源...... – Matsmath

+0

過程,過程,過程。儘可能自動完成構建和部署,以便您只需鍵入'./build foo'並且構建腳本每次都會自動將所需的所有內容都放入其中。任何手動方法註定要失敗。 –

回答

1

只要使用醇」好版本控制的可能性

  1. 在方便的情況下,你可以只添加(任意)可見版本ID代碼和檢查(哈希,修訂ID,時間戳)
  2. 如果您的項目有很多依賴文件,並且您懷疑生成的代碼中的版本比舊版本更新,那麼您可以(除了明顯的makefile文件規則外)監控每個文件的版本,用於構建代碼(VCS-相關的,但是沒那麼重招)
0

檢查可執行文件的時間戳。這應該給你一個關於它是否是最近/最新的暗示。 或者,爲您的可執行文件計算一個校驗和並在啓動時顯示它,然後您有線索,如果csum相同,則可執行文件未更新。

+0

我建議這樣做,但這樣做似乎很奇怪。這是人們在這個行業中做的事嗎? – Matsmath

相關問題