2012-04-16 61 views
3

我寫了一個簡單test.cc如下:爲什麼我不能在gdb中使用函數?

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Hello world" << endl; 
    return 0; 
} 

和我一起編譯:

g++ -g test.cc -o test.o 

我跑gdb並在"Hello world"線將斷點:

$ gdb test.o 
(gdb) b 7 
(gdb) c 

然後gdb停在"Hello world"線,但是當我運行

(gdb) s 

它無法進入cout函數。所以我的問題是,我怎麼能進入cout函數?

+2

值得一提的是,'cout'不是一項功能。你正在尋找函數:'operator <<'。 – 2017-02-21 01:27:12

回答

6

如果它沒有鏈接到帶有調試信息的標準庫的版本,它不知道如何進入庫;它只能跨越它(也就是說,直到控制權返回到帶有調試信息的代碼)。

請查閱您系統的文檔以瞭解如何安裝標準C和C++庫的調試版本。

+0

是的,你的答案是我期待的。步入cout需要一些額外的信息。 – stackunderflow 2012-04-16 00:54:25

+0

上面的問題不是我真正的觀點。在另一個程序中,我試圖在另一個文件中插入一個函數(不是標準的C/C++庫)。但是它失敗並且說「.gdbinit:沒有這樣的文件或目錄」,「由於共享庫事件而停止」,「無法訪問地址0x1處的內存」。你知道這個問題可能是什麼嗎? – stackunderflow 2012-04-16 00:57:46

+0

你可能做得更好,首先要問。這聽起來很混亂,但沒有足夠的信息來確定原因 - 您是否有更具體的例子說明發生這種故障的原因? (另外,包括平臺,例如,OS X的'gdb'有一些已知的錯誤。) – geekosaur 2012-04-16 01:02:40

1

沒有調試信息,它仍然可以調試它,只是更加痛苦。見here

如果like me,你只是想打破其他調用相同的功能,而沒有深入挖掘,那麼在用disas反彙編獲得的函數地址上設置斷點並不難。

相關問題