如何根據 crash 位址找到對應的行號

2021-04-18 14:25:06 字數 3128 閱讀 3219

有時候我們的程式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對應的儲存位址,從而找到相應的鍵 值對。...