一直忙著除錯**,寫伺服器的**,有時候真叫人鬱悶,鬱悶的是要高效能的保持程式繼續執行n多天還沒有事情,本來這也是程式設計師該做的事情,但是有時候一些長期積累下來的問題會造成程式指明性的打擊~~~
在寫這個程式的時候,本機除錯**的時候都沒有遇到任何記憶體洩漏的問題,除錯的時候都很清晰,但是到客戶那裡執行一天到兩天就沒名的掛掉,真讓人鬱悶
而且沒有任何報錯~~無奈,
開啟了drwtsn32來檢測程式的執行報錯情況
drwtsn32是windows除錯的利器,除錯不常見錯誤的程式的時候,累積錯誤的時候,都可以用它.
在命令列視窗,輸入drwtsn32
然後就可以看到drwtsn32的執行介面
然後設定"轉存到符號表"
"轉儲全部執行緒上下文"會在出錯的時候把程式執行的上下文都記錄下來,如果只想知道出錯那個地方的記錄,就不要選這個,看起來方便很多
然後確定儲存這些資訊
相應的windows程式生成的時候,也得做一些改動,要生成map檔案,這樣好找到出問題的**地方
vc設定:
1、配置屬性-〉c/c++-〉常規-〉除錯資訊格式, 選擇「程式資料庫(/zi)」
2、配置屬性-〉c/c++-〉優化,選擇「禁用(/od)」
3、配置屬性-〉聯結器-〉除錯-〉生成除錯資訊,選擇 「是(/debug)」
4、配置屬性-〉聯結器-〉除錯-〉生成影射檔案,選擇 「是(/map)」
5、配置屬性-〉聯結器-〉除錯-〉影射檔名,選擇「$(outdir)/$(projectname).map」
6、配置屬性-〉聯結器-〉除錯-〉影射匯出,選擇「是(/mapinfo:exports)」
7、配置屬性-〉聯結器-〉除錯-〉影射行,選擇「是(/mapinfo:lines)」
8、配置屬性-〉聯結器-〉高階->固定基址,選擇「生成重定位節(/fixed:no)」
然後命令列執行drwtsn32
等待程式出錯~~
程式出錯以後會把log和乙個dmp檔案儲存到故障轉存 和日誌檔案路徑 那個目錄下面,這個目錄可以自己設定.
在log資訊裡面有這樣的資訊
*----> 系統資訊 <----*
計算機名: f6b2548c83754cf
使用者名稱: administrator
處理器數量: 1
處理器型別: x86 family 6 model 8 stepping 6
0041e6bb 8b45e0 mov eax,[ebp+0xe0] ss:00d9907e=????????
錯誤 ->0041e6be 8b500c mov edx,[eax+0xc] ds:00c69ee6=????????
0041e6c1 52 push edx
0041e6c2 ff1518af4300 call dword ptr [0043af18] ds:0043af18=7c177c00
很多資訊
然後對應的去找你vc 生成的map檔案的地方~~
找到**出現那樣情況的地方~~
~~~然後讓你的程式vc除錯,反彙編,找到對應的地方~~
ps:這只是一種最簡單的方法:)
更多的方法,看《windows程式除錯》
TRACE32除錯技巧
1.除錯步驟 l 連線好 trace32 icd 和目標板,注意不要帶電插拔 jtag 容易損壞 trace32 或目標板,然後依次開啟 trace32 icd 和目標板的電源。l 開啟除錯軟體 trace32 l 設定 cpu 型別,狀態等,可以通過命令或選單,命令如下 sys.reset sys...
stm32硬體除錯
stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果 封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該 電容應放置盡量靠近mcu ...
EDK32 NT32pkg 編譯和除錯
edk32 nt32pkg提供了在windows下 uefi bios的能力,對於初學者學習framework有很大的幫助。另外順便一提的是,linux下也有類似的unixpkg,提供用gcc編譯 gdb除錯的 包。進入今天的實驗 開啟cmd,進入c edk2執行edksetup.bat 然後執行b...