VS2013無法進入斷點進行除錯
轉載自http://blog.csdn.net/hkwlg1314/article/details/49388525
以前也遇到過同樣的問題,但沒有問個為什麼,也沒有探個畢竟。昨天除錯一個DLL,新增輸出資訊吧,太麻煩而且不輕易定位,
但設定斷點後按“F5”,斷點不可用,氣泡提示“當前不會命中斷點,還沒有為該文件載入任何符號。
”再右鍵->“位置”->“答應原始碼與原始版本不同”,還是不行。77777我還不信了,整它!
後來才發現,“Alt+F7”->“配置屬性”->“除錯”->“命令”中輸入的 exe 路徑下,已經提供了此 DLL,
壓根就沒有呼叫咱 F5 啟動的DLL。。。。。。把 exe (以及相關的其它檔案,假如有)拷貝到 DLL 目錄下,就可以除錯了。
犯了個低階錯誤。但也總結了一下不能除錯的各種可能原因:
1.解決方案配置是 Debug ,但沒有在工程屬性頁中“Alt+F7”->“配置屬性”->“C/C++”->“常規”->“除錯資訊格式”,
選擇“用於“編輯並繼承”的程式資料庫(/ZI)”。另外,在“配置屬性”->“連結器”->“除錯”->“生成除錯資訊”中,選擇“是”。
【 2 】
vs2005奇怪的斷點無效問題
最近一工程中,在除錯的時候,有些cpp檔案都可以設定斷點並且跟進去,但是有一個cpp檔案總是不能設定斷點,
提示“當前不會命中斷點。原始碼與原始版本不同。” 重新更換過n次檔案都不起作用,然後在goole搜尋此類類似問題,
找到下篇文章,
然後我把那個cpp檔案用記事本開啟,另存為unicode格式,再重新編譯,最後問題解決!
也可以更改vs2005的設定,選項->常規,將要求原始檔與原始版本完全匹配的勾取消就可以了!
清理整個解決方案,重新編譯,無效。刪除整個目錄,從SubVersion伺服器上Down下來重新來過,一樣無效。上網搜尋,未果。
【3】
經常被vs2005的一些選項設定搞慘,這玩意兒太莫名其妙了.
就像上次的那個warning一樣,解決辦法居然是使用/n替換/n.
VS2005斷點失效(斷點不可用)解決方案在網上搜羅了一下,如下:
1、無效斷點所在的專案和啟動專案的設定:專案->屬性->配置屬性->C/C++->常規->除錯資訊格式,這裡不能為『禁用』;
2、專案->屬性->配置屬性->連結器->除錯->生成除錯資訊,這裡設為『是』;
3、C/C++->優化->優化選擇『禁用』;
4、刪除解決方案下的.ncb檔案;
5、工具->選項->除錯->『要求原始檔與原始版本完成匹配』去掉勾;
6、最後在上述設定的情況下,重新編譯整個解決方案;
不過我的情況是debug模式下,1,2,3,4,6都試過了斷點還是不可用,最後試試5居然就行了.真噁心!
7.如果斷點仍然無效,那麼請格式化程式碼.很可能是程式碼含有不可見字元或程式碼單行過長等原因造成.
解決方法3:重新生成解決方案或者先清理解決方案再生成解決方案
這時再執行,斷點也可以正常進入。
那麼為什麼會造成這種情況呢?這時因為除錯時使用的是PDB(Program Database)檔案,而當我們在類庫中修改程式碼後,由於沒有重新編譯,會使用上次的PDB檔案,這樣就造成了原來的PDB和新的程式碼檔案不匹配,自然除錯時也就無法正確進入斷點。
再有前面提到,有時斷點會跳到其他的位置,是因為斷點是定位在程式碼的行上的,而PDB檔案中記錄了程式碼的行數,但是PDB檔案卻沒有更新,所以當我們強行將斷點處的程式碼設定"允許原始碼與原始版本不同"時,如果依舊使用上一次的PDB檔案,自然斷點的行數就定位到了上次記錄的程式碼行數,所以斷點就會往後跳了。