为什么gdb不能用于这个简单的hello world程序?

Qua*_*ark 5 c++ linux gdb segmentation-fault

代码(m1.cpp):

#include <iostream>
using namespace std;

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

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

当我在没有设置任何断点的情况下运行时,它运行没有错误.

按照要求:

(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 ?? ()
Run Code Online (Sandbox Code Playgroud)

Maz*_*MIK 0

我在 GNU gdb 版本 7.11.1 中检查了这一点。它在里面工作得非常好。我首先编译了相同的程序并使用以下命令构建它:

g++ -g m1.cpp
Run Code Online (Sandbox Code Playgroud)

然后,在 gdb 中运行可执行文件,如下所示:

gdb -q ./a.out

并做了你提到的同样的事情。效果很好。更新你的 gdb,再次检查并告知。