1. 程式人生 > >VS2013無法進入斷點進行除錯

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檔案,自然斷點的行數就定位到了上次記錄的程式碼行數,所以斷點就會往後跳了。