定位思路:
#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 的確返回空指標,這是空指...