首先,徹底的release版本(vc預設)是無法進行源**級別的除錯的,即使從別的地方把pdb檔案拷貝過來也沒用。
如果想要進行源**級別的除錯,在生成release版本(dll, exe, ocx)時就要把一些除錯資訊build到dll/exe/ocx中,並讓編譯程式生成對應的pdb檔案來儲存詳細的除錯資訊,有了這樣的exe/dll及pdb、原始檔,就可以進行除錯了。具體的步驟如下:
1、 控制編譯過程。vc->project settings-> c/c++ tab, general category, debug info combo box, select program database. this setting will add the /zi switch to your compiles. 不要選擇 program database for edit and continue (/zi),一般用不到。另外/z7選項也可以,它跟/zi的區別是/z7 生成codeview格式的除錯資訊,儲存在obj檔案中;/zi 生成程式資料庫格式的除錯資訊,儲存在.pdb檔案中。
2、 控制鏈結過程。vc->project settings->link tab, general category, check generate debug info. this setting turns on the /debug switch to the linker. 作為可選項也可以在鏈結選項中鍵入/opt:ref,這個選項告訴鏈結器不要為那些沒有被呼叫的函式生成除錯資訊.但是實際上這個選項是不必要的,因為對於dll來說我們鏈結時無法知道哪些會被呼叫.另外即使不加這個選項無非也就是使得編譯出來的exe/dll大一點而已,一般來說不是問題.
有了除錯資訊,release版本跟debug版本的區別主要在於有沒有進行優化.可能由於優化,release版本除錯時源**對不上當前執行狀態,但是總比沒有除錯強.對於乙個商業應用來說,尤其是客戶那邊出了問題就需要到客戶那邊除錯的情況,特別需要release版本也帶有除錯資訊.為了除錯方便付出的代價就是生成的exe/dll比較大,這個代價是值得的.需要除錯,把pdb檔案和源**拷貝帶著就可以上路了.
如何除錯程式的 Release 版本
首先,徹底的release版本 vc預設 是無法進行源 級別的除錯的,即使從別的地方把pdb檔案拷貝過來也沒用。如果想要進行源 級別的除錯,在生成release版本 dll,exe,ocx 時就要把一些除錯資訊build到dll exe ocx中,並讓編譯程式生成對應的pdb檔案來儲存詳細的除錯資訊...
Release下輕鬆除錯程式。
在開發過程中經常會碰到一寫莫名其妙的情況發生,比如明明在debug下編譯執行一切正常,但是在release下編譯執行總是會出錯。這個時候多希望release下可以除錯程式啊。之前我一直以為這是不可能,後來才發現,微軟的vs工具為我們提供了這樣乙個功能,平時大家可能沒有注意到。我們只需要做一些簡單的設...
除錯Release發布版程式的Crash錯誤(一)
非常感謝作者提供了乙個系統的解決方案 在windows平台下用c 開發應用程式,最不想見到的情況恐怕就是程式崩潰,而要想解決引起問題的bug,最困難的應該就是除錯release版本了。因為release版本來就少了很多除錯資訊,更何況一般都是發布出去由使用者使用,crash的現場很難保留和重現。本文...