有時候我們的程式crash了,會出現乙個crash介面提示我們在什麼位置中斷了。我們如何根據這個中斷位址找到對應的行號呢?
要想達到這樣的目的,首先要進行一些工程屬性的配置。
c/c++->常規->除錯資訊格式->程式資料庫
c/c++->優化->優化->禁用
鏈結器->除錯->生成除錯資訊->是
->生成對映檔案->是
->對映檔名稱->$(outdir)/$(projectname).map
->對映匯出->是
->對映行->是
int main (int argc, char* argv)
當執行程式的時候,顯示「test1.exe中的0x0040100e處未處理的異常:0xc000005:寫入位置0x00000000時發生訪問衝突」
timestamp is 4639462c (thu may 03 10:17:16 2007)
preferred load address is 00400000
start length name class
0001:00000000 00003b58h .text code
0002:00000000 000000c4h .idata$5 data
0002:000000d0 00000c40h .rdata data
0002:00000d10 00000048h .rdata$debug data
0002:00000d60 00000008h .rdata$sxdata data
0002:00000d68 00000004h .rtc$iaa data
0002:00000d6c 00000004h .rtc$izz data
0002:00000d70 00000004h .rtc$taa data
0002:00000d74 00000004h .rtc$tzz data
0002:00000d78 00000014h .idata$2 data
0002:00000d8c 00000014h .idata$3 data
0002:00000da0 000000c4h .idata$4 data
0002:00000e64 00000366h .idata$6 data
0002:000011ca 00000000h .edata data
0003:00000000 00000004h .crt$xca data
0003:00000004 00000004h .crt$xcaa data
0003:00000008 00000004h .crt$xcz data
0003:0000000c 00000004h .crt$xia data
0003:00000010 00000008h .crt$xic data
0003:00000018 00000004h .crt$xiz data
0003:0000001c 00000004h .crt$xpa data
0003:00000020 00000004h .crt$xpz data
0003:00000024 00000004h .crt$xta data
0003:00000028 00000004h .crt$xtz data
0003:00000030 00000274h .data data
0003:000002c0 00000598h .bss data
calculation: crash_address - preferred_load_address - 0x1000
0x0040100e -0x00400000-0x1000=0x0000000e
接著在map中查詢對應的obj
address publics by value rva+base lib:object
0000:00000000 __except_list 00000000 0000:00000002 ___safe_se_handler_count 00000002 0001:00000000 _main 00401000 f test1.obj
0001:00000017 __amsg_exit 00401017 f libc:crt0.obj
0001:0000003c _maincrtstartup 0040103c f libc:crt0.obj
0001:00000203 ___crtexitprocess 00401203 f libc:crt0dat.obj
最後根據obj和計算的值在map中找第乙個小於我們所計算的值的位置
line numbers for ./release/test1.obj(d:/test/test1/test1/test1.cpp) segment .text 2 0001:00000000 3 0001:00000004 4 0001:0000000b 5 0001:00000011
然後在.map中查詢第乙個小於我們所計算的值的位置
所以我們的中斷位置是在第4行
如何根據檔案描述符找到對應socket的連線
如何根據檔案描述符找到對應socket的連線 方式1 ss命令找到連線對應的檔案描述即可 root cnsz17v proc net ss antp grep 10.119.54.12 grep 6533 estab 0 0 10.119.2.63 51876 10.119.54.12 8001 u...
dos下根據埠找到對應的程式
開發的時候我們經常遇到埠被占用的情況,例如你的應用沒有關閉就重啟,當然解除埠占用的方法有很多,例如直接把程式關閉,然後重啟,這裡我說點如何在dos下解除埠占用的情況。假設我遇到的埠是8009,開啟dos的命令視窗 win r鍵,在輸入框輸入cmd netstat ano findstr 8009 這...
雜湊結構是如何找到相對應的鍵 值對?
雜湊結構作為一種抽象資料結構,hash表的實現思路如下 通過某種演算法,在 鍵 值對的儲存位址和 鍵 值對中的key之間,建立一種對映,使得每乙個key,都有乙個確定的儲存位址於之對應。這種演算法被封裝在hash函式中。在查詢時,通過hash函式,算出和key對應的儲存位址,從而找到相應的鍵 值對。...