空指標coredump定位

2022-06-13 10:00:11 字數 4439 閱讀 3238

定位思路:

#12 0x00007f8e0e4b78dd in clone () from /lib64/libc.so.6**段1:

283:// 檢查返回值,如果這裡錯誤,那麼需要設定全域性退出標記,退出程序

284:if ( ret != 0 )

285:

**段2:

526:template527:int isp_reactor_acceptor::clear_timer_evh(void)

528:

發現這裡並沒有assert 使用,原因時release版本遮蔽了assert:

同時本地驗證 assert 產生的coredump;

core was generated by `./a.out'.

program terminated with signal 6, aborted.

#0 0x00007fba9869831e in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:67

67 int res = inline_syscall (tgkill, 3, pid, selftid, sig);

missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.x86_64 libgcc-4.4.7-16.el6.x86_64 libstdc++-4.4.7-16.el6.x86_64

(gdb) bt

#0 0x00007fba9869831e in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:67

#1 0x00007fba98699765 in abort () at abort.c:91

#2 0x00007fba986918ce in __assert_fail_base (fmt=, assertion=0x4006d1 "0", file=0x4006c8 "test.cpp",

line=, function=) at assert.c:94

#3 0x00007fba98691990 in __assert_fail (assertion=0x4006d1 "0", file=0x4006c8 "test.cpp", line=7,

function=0x4006d3 "int main()") at assert.c:103

#4 0x00000000004005c1 in main ()

在linux上 assert產生的coredump傳送的時訊號6,注意區分

看是否可以挖掘到可用的資訊

這裡檢視到,對應**

#8  0x0000000000446f4c in srm_ev_task::svc (this=0x7ffff3ac27a0)

at /home/jenkins/workspace/yydhdlmrmredhat_7c08eca4-3973-4435-a6b0-4a5e721482c0/source/core/server/mrm/srm_ev_task.cpp:288

檢視:

(gdb) f 8

#8 0x0000000000446f4c in srm_ev_task::svc (this=0x7ffff3ac27a0)

at /home/jenkins/workspace/yydhdlmrmredhat_7c08eca4-3973-4435-a6b0-4a5e721482c0/source/core/server/mrm/srm_ev_task.cpp:288

288 /home/jenkins/workspace/yydhdlmrmredhat_7c08eca4-3973-4435-a6b0-4a5e721482c0/source/core/server/mrm/srm_ev_task.cpp: 沒有那個檔案或目錄.

(gdb) p acceptor_

$1 = (srm_ev_acceptor *) 0x0

發現原來是 acceptor_ 為空,但是呼叫了物件的函式,那為什麼還可以呼叫呢?解釋物件為空時,可呼叫成員函式

250             ret = acceptor_->open(local, backlog);

251 if ( ret != 0 )

252 {

253 delete acceptor_, acceptor_ = null;

254 isp_assert_logerr(ret == 0,

255 ("mrm_ev_task::svc() open event acceptor failed, code = %d", ace_os::last_error()));

沒有core dump檔案如何定位問題

最近在 linux qt上做開發,發現程式異常crash,用core dump檔案也沒有記錄下來有用的資訊,如下圖 定位程式異常crash 的過程百般痛苦,雖然最後是用 把core dump檔案大小的限制取消,完整記錄程式崩潰的堆疊資訊結合gdb 定位到問題,但發現分享的 不用core dump 定...

core dump簡單定位到出錯行

1.生成core檔案 方法 1.使用ulimit c 命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,不會生成core檔案 2.使用ulimit c unlimited 命令,設定core檔案的大小不受限制 2.使用core檔案 方法 1.執行程式出現 segmentation f...

關於空指標

臭名昭著的空指標到底是什麼?語言定義中說明,每一種指標型別都有乙個特殊值 空指標 它與同型別的其它所有指標值都不相同,它 與任何物件或函式的指標值都不相等 也就是說,取位址操作符 永遠也不能得到空指標,同樣對 malloc 的成功呼叫也不會返回空指標,如果失敗,malloc 的確返回空指標,這是空指...