不能設置斷點的檢查步驟

轉自:http://blog.csdn.net/Donjuan/article/details/3863241  
在調試程序的時候,有的時候你會發現設置的斷點不起作用,而且更糟糕的是,一般碰到這種情況的時候都是非常緊急或者是加班到夜已深、人寂靜的時候了。正是應了那句玩笑話:“機器機器,越急越氣!”。一般發生斷點不起作用的話:

1.         你首先要判斷的是斷點是否真的設置上了?

a)         如果在Visual Studio裏面,你的斷點符號是一個實心圓,那麼斷點的確是設置上了,你要判斷的是設置斷點的語句是否真的被執行到了,這種情況的解決方案不在本文討論當中。

b)         如果在Visual Studio裏面,你的斷點符號是一個空心圓,那麼說明斷點被你禁用了,那麼啓用就行了。

c)         如果在Visual Studio裏面,你的斷點符號是一個空心圓並且還帶了一個小感嘆號的話,如下圖所示:

 

那麼說明你的調試符號文件沒有被正確加載,參看我這篇文檔瞭解什麼是符號文件:http://blog.csdn.net/Donjuan/archive/2008/12/05/3454597.aspx

2.         如果確定是符號文件沒有加載正確,單擊“調試”-- >“窗口”-- >“模塊”列出程序加載的所有DLL文件,模塊窗口還會列出每一個DLL文件的符號文件加載信息:

 

3.         由於我們設置的斷點的源文件是TestWPF.exe源代碼的一部分,從第二列裏面可以看出Visual Studio沒有找到TestWPF.exe的PDB文件,爲了查看Visual Studio嘗試在哪些路經加載我們的符號文件,可以右鍵單擊TestWPF.exe那一行,在彈出菜單裏面選擇“符號文件加載信息”,打開的窗口裏面詳細顯示了爲什麼Visual studio沒有成功加載TestWPF.exe的PDB文件,這是一個輸出的例子:

E:/Workspace/Study/Forum/Test/TestWPF/bin/Debug/TestWPF.pdb: Cannot find or open the PDB file.

E:/Workspace/Study/Forum/Test/TestWPF/obj/Debug/TestWPF.pdb: Cannot find or open the PDB file.

C:/WINDOWS/symbols/exe/TestWPF.pdb: Cannot find or open the PDB file.

C:/WINDOWS/exe/TestWPF.pdb: Cannot find or open the PDB file.

C:/WINDOWS/TestWPF.pdb: Cannot find or open the PDB file.

4.         如果你有PDB文件,只要在右鍵菜單裏面選擇“加載符號文件”選項在打開的對話框裏面輸入符號文件的路徑就可以了。如果你選擇了符號文件,Visual studio還是報錯說符號文件不能加載的話,那麼請確認符號文件是否和調試的模塊相匹配,因爲不匹配的話,調試器就沒有辦法正確設置斷點,沒有正確顯示變量的值。

a)         判斷符號文件與模塊是否匹配最簡便的方法就是察看兩者的創建時間是否相同,如果不同的話,那就肯定是不匹配的。

b)         如果時間相同,那有可能是因爲模塊文件是調試(Debug)版本,而符號文件是發佈(Release)版本,這個時候,你可以用windbg自帶的symchk程序來檢查一下。命令的語法是:

Symchk.exe <模塊的完整路徑> /s <符號文件所在的文件夾>

下面兩個圖片分別是符號文件不匹配和匹配的輸出示例:

 

符號文件和模塊不匹配

 

符號文件和模塊匹配的情形

 

c)         或者你有源代碼的話,那就乾脆重新編譯一次就完了—這是最簡單的方法。

5.         如果在“模塊”窗口裏面顯示的是“跳過加載符號文件”,那麼說明Visual studio默認認爲這個模塊的源代碼不是程序的一部分,比如是程序引用到的一些.NET Framework的Assembly文件,因此它認爲你不必要給這個模塊排錯。但是有的時候你需要看看堆棧信息或者需要單步跟蹤進.NET Framwork的函數裏面看看爲什麼調用會出錯,因此你可以通過單擊VS菜單裏面的“工具”-- >“選項”-- >“調試”-- >“通用(General)”,勾掉“只調試我的代碼”複選框,點擊確定就可以了:

發佈了69 篇原創文章 · 獲贊 13 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章