2017-04-11 64 views
4

代碼(m1.cpp):爲什麼gdb不適用於這個簡單的Hello World程序?

#include <iostream> 
using namespace std; 

int main (int argc, char *argv[]) 
{ 
    cout << "running m1" << endl; 

    return 0; 
} 

GDB版本:GNU GDB(GDB)7.6.2

使用內置:g++ -g m1.cpp

命令行歷史:

(gdb) b main 
Breakpoint 1 at 0x40087b: file m1.cpp, line 6. 
(gdb) r 
Starting program: .../a.out 

Program received signal SIGSEGV, Segmentation fault. 
0x00002aaaaaac16a0 in strcmp() from /lib64/ld-linux-x86-64.so.2 
(gdb) c 
Continuing. 

Program terminated with signal SIGSEGV, Segmentation fault. 
The program no longer exists. 
(gdb) 

當我沒有設置任何斷點時運行,它運行沒有錯誤。

按照要求:

(gdb) bt 
#0 strcmp() from /lib64/ld-linux-x86-64.so.2 
#1 in check_match.12104() from /lib64/ld-linux-x86-64.so.2 
#2 in do_lookup_x() from /lib64/ld-linux-x86-64.so.2 
#3 in _dl_lookup_symbol_x() from /lib64/ld-linux-x86-64.so.2 
#4 in _dl_relocate_object() from /lib64/ld-linux-x86-64.so.2 
#5 in dl_main() from /lib64/ld-linux-x86-64.so.2 
#6 in _dl_sysdep_start() from /lib64/ld-linux-x86-64.so.2 
#7 in _dl_start() from /lib64/ld-linux-x86-64.so.2 
#8 in _start() from /lib64/ld-linux-x86-64.so.2 
#9 in ??() 
+0

無法用GDB 7.12.0重現。 – nwp

+0

您是否建議我需要更新GDB?我所處的環境被許多其他程序員使用,所以我很好奇爲什麼它只發生在我身上。 – Quark

+1

你是如何編譯你的代碼的?你是如何安裝gdb的? –

回答

0

我查了,在我的GNU GDB版本7.11.1。它工作得很好。 我先編譯同樣的程序,並使用內置的:

g++ -g m1.cpp 

然後,跑了GDB可執行如下:

的gdb -q ./a.out

並做了你提到的同樣的事情。它運行良好。 更新你的gdb,並再次檢查並讓知道。

1

我能夠複製OP的觀察行爲(使用相同的編譯並獲得相同的回溯)。行爲在GDB和GCC範圍內持續存在。我注意到,當我解除SHELL時,症狀消失。在我的正常環境中,我使用tcsh(版本1.15.00)。如果SHELL被設置,那麼(我相信)gdb使用tcsh啓動。如果我解除SHELL,gdb使用sh啓動。這足以讓我取得進展。對於tcsh中顯示問題的不同之處,我沒有一個明確的解釋,但是如果其他人有相同的行爲,它可能會更清楚地表明問題。

相關問題