代码(m1.cpp):
#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 :(得分:2)
我能够复制OP观察到的行为(使用相同的编译并获得相同的回溯)。该行为在GDB和GCC范围内持续存在。我注意到当我取消SHELL时症状消失了。在我的正常环境中,我使用tcsh(版本1.15.00)。如果设置了SHELL,那么(我相信)gdb使用tcsh启动。如果我取消设置SHELL,gdb将使用sh启动。这足以让我取得进步。我没有清楚地解释tcsh中存在什么不同以表明问题,但如果其他人有相同的行为,它可能会更清楚地解决这个问题。
答案 1 :(得分:0)
我在我的GNU gdb版本7.11.1中检查过。它工作得非常好。 我首先编译了相同的程序并使用它构建它:
g++ -g m1.cpp
然后,按如下方式在gdb中运行可执行文件:
gdb -q ./a.out
做了你提到的同样的事情。它工作正常。 更新您的gdb,然后再次检查并告知。