vs 調試

 

本來在之前的“vc6.0編譯c++程序後在vc2008中調試的奇技淫巧(符號信息和鏈接)"

http://hi.baidu.com/widebright/blog/item/3262272d34e5002a359bf74d.html?timeStamp=1326769867413

一文裏面有提到的了,但昨天還是忘了第一步的,找了好久。再次給自己強化一下記憶。

 

 

使用 debug 模式編譯,不要用release模式。

如果還是不行,或者想在release版本調試,往下看。

 

====================================

 

 

1. 編譯的時候給cl.exe 制定 /ZI 編譯選項

 

在visual studio 裏面設置選項。

工程屬性 -> C/C++ -> "General" -> Debug Information Format -> Program Database for Edit And Continue

 

參考

http://msdn.microsoft.com/zh-cn/library/958x11bc(v=vs.100).aspx

/ZI

以支持“編輯並繼續”功能的格式產生如上所述的程序數據庫。 如果想使用“編輯並繼續”調試,則必須使用此選項。 因爲大多數優化與“編輯並繼續”不兼容,所以使用 /ZI 會禁用代碼中的所有 #pragma optimize 語句。

 

/ZI 會導致在編譯中使用 /Gy(啓用函數級鏈接) 和 /FC(所診斷源代碼文件的完整路徑)。

 

/ZI 與 /clr(公共語言運行時編譯) 不兼容。

 

 

---------------------------------------------------

2. 鏈接的時候給link.exe 制定編譯選項 /DEBUG 和 /PDB:filename

 

 

工程屬性 -》”configuration properties “ -》 “Linker” -》“debugging” -》 “generate program datbase file ”制定了 生成的pdb符號信息文件的具體位置。 “Generate Debug Info” 設置爲 yes

 

 

解釋參考 

http://msdn.microsoft.com/zh-cn/library/xe4t6fc1(v=vs.90).aspx

http://msdn.microsoft.com/zh-cn/library/kwx19e36(v=vs.90).aspx

 

/DEBUG 選項創建 .exe 文件或 DLL 的調試信息。

 

鏈接器將調試信息放在程序數據庫 (PDB) 中。它在後面的程序生成期間更新 PDB。

 

爲調試創建的 .exe 文件或 DLL 包含相應 PDB 的名稱和路徑。調試器在您調試程序時讀取嵌入的名稱並使用 PDB。鏈接器使用程序的基名稱和擴展名 .pdb 命名程序數據庫,並嵌入它的創建路徑。若要重寫該默認值,請設置 /PDB 並指定不同的文件名。

 

編譯器的僅限行號 (/Zd) 或 C7 兼容 (/Z7) 選項使編譯器將調試信息保留在 .obj 文件中。還可以使用程序數據庫 (/Zi) 編譯器選項將調試信息存儲在 .obj 文件的 PDB 中。鏈接器首先在寫入 .obj 文件的絕對路徑中查找對象的 PDB,然後在包含 .obj 文件的目錄中查找。不能指定對象的 PDB 文件名或鏈接器的位置。

 

指定 /DEBUG 時暗含 /INCREMENTAL。

 

/DEBUG 將 /OPT 選項的默認值從 REF 更改爲 NOREF 以及從 ICF 更改爲 NOICF(因此,需要顯式指定 /OPT:REF 或 /OPT:ICF)。

 

有關 .PDB 和 .DBG 文件的更多信息,請參見知識庫文章 Q121366,INFO: PDB and DBG Files - What They Are and How They Work。可以在 MSDN Library 中或 http://support.microsoft.com/default.aspx?ln=zh-cn 上找到知識庫文章。

 

無法創建包含調試信息的 .exe 或 .dll。調試信息始終放在 .pdb 文件中。

 

在 Visual Studio 開發環境中設置此鏈接器選項

 

打開此項目的“屬性頁”對話框。有關詳細信息,請參見設置 Visual C++ 項目屬性。

 

單擊“鏈接器”文件夾。

 

單擊“調試”屬性頁。

 

修改“生成調試信息”屬性。

 

以編程方式設置此鏈接器選項

 

--------------------------------------------

3.

 

“attach to process” 或者附加到進程。在“module”窗口裏面找到對應的dll,可以看到pdb符號文件是不是加載成功。右鍵會有“symbol load informations”  “symbol setting” 兩個選項。

 

或者中斷後 "call stack"  窗口裏面,右鍵也相應的 dll的函數名 ,會有“symbol load informations”  “symbol setting” 兩個選項

 

這個也會打開第4步的那個窗口。 

在這個窗口裏面可以手工設置加載自己制定的pdb 符號文件。

如果發現pdb已經找到,但是還沒法在制定的源碼下斷點,請檢查前面的第一個第二步的設置,特別是這個 /ZI 選項一定要制定,不然在這個窗口裏面看到了pdb已經加載,但卻沒發下斷點,提示沒有符號信息。另外如果使用的命令行或者makefile的話的link.exe一定要和visual studio的版本對應,vc 2010就用

用vc2010的link.exe.

 

 

 

 

-----------------------------------------------

4. “tools” -》 “options” -》 “debugging”  -》 “symbol” 那裏可以指定 加載 特定的符號

 

 

------------------------------------------

5. 另外vc2008 編輯修改文件後,沒法下斷點,提示源碼行沒有匹配的情況。

重新編譯一下,如果還不解決問題,好像是個bug,選中文件的所有行,然後利用菜單裏面的  edit ——》advance -》 format selection 把該文件的所有的代碼都格式化一下。再保存,重新編譯就可以了。

 

 

------------------------------------------

6. MSDN裏面關於pdb文件的說明

 

PDB Files (C++)

 

http://msdn.microsoft.com/en-us/library/yd4f8bd1(v=VS.90).aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章