2009-12-22 155 views
1

當我在gdb中運行核心文件時,gdb沒有顯示錯誤來自哪裏或者哪個行 在導致問題的應用程序中。gdb不打印調試信息

我使用編譯器選項-g -DDEBUG -D_DEBUG,但它似乎沒有幫助。

任何幫助,將不勝感激,謝謝。

+0

錯誤可能發生在庫函數內部。你嘗試過輸入'backtrace'嗎? – Artelius 2009-12-22 22:42:42

回答

2

你可能會吹你的堆棧。例如,運行下面的程序

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    int a[10]; 

    memset(a, 0, 100 * sizeof a[0]); 

    return 0; 
} 

,然後運行對所得core收率

 
$ gdb oflow core 
[...] 
Core was generated by `./oflow'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x0000000000000000 in ??() 

wherebt命令的輸出gdb後不是非常有用:

 
(gdb) where 
#0 0x0000000000000000 in ??() 
#1 0x0000000000000000 in ??() 
(gdb) bt 
#0 0x0000000000000000 in ??() 
#1 0x0000000000000000 in ??() 
0

好的,問題解決了。我有一個遞歸函數返回一個字符串,但問題是沒有什麼被返回,但我仍然不明白爲什麼調試信息沒有生成,當我一步一步通過代碼它顯示行號我正在步進通過,但我想,因爲它得到一個錯誤的行失蹤了?所以沒有斷點出錯的地方?當它試圖通過遞歸到函數來連接它時,使用「+ =」它會進入第二個調用,但是會在函數結束時崩潰,因爲沒有返回任何內容。但是不應該在它沒有返回的行上的第一個函數調用上產生錯誤?

謝謝。