C++ 为什么GDB不在断点处停止?
我用这个简单的代码来测试我的GDB(GNU GDB(Ubuntu 7.11.1-0ubuntu1~16.04)7.11.1),我的linux在docker中运行,代码是:C++ 为什么GDB不在断点处停止?,c++,docker,gdb,C++,Docker,Gdb,我用这个简单的代码来测试我的GDB(GNU GDB(Ubuntu 7.11.1-0ubuntu1~16.04)7.11.1),我的linux在docker中运行,代码是: // hello.cc #include <iostream> int main() { std::cout << "hello world!" << std::endl; } 并按如下方式进行调试: (gdb) file out.a (gdb) b main Note: bre
// hello.cc
#include <iostream>
int main() {
std::cout << "hello world!" << std::endl;
}
并按如下方式进行调试:
(gdb) file out.a
(gdb) b main
Note: breakpoint 1 also set at pc 0x40084a.
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040084a in main() at hello.cc:3
(gdb) r
hello world!
During startup program exited normally.
为什么gdb没有在
main
上停止?我可以想到两个原因:
- 我使用的gdb版本是7.0-0.4.16,它按预期工作(即在main停止)。可能它与您拥有的gdb版本有关
- 我对你的gdb案例中的信息输出感到有点惊讶。它将断点的行号显示为“3”。理想情况下应该是4
排除上述其他两种选择。刚才注意到您的linux运行在一个docker上。在本例中,您的测试程序是一个在docker上运行的进程,我假设gdb是在本机上调用的。您可能需要使用lxc attach将docker连接到gdb,我可以想到以下几个原因:
- 我使用的gdb版本是7.0-0.4.16,它按预期工作(即在main停止)。可能它与您拥有的gdb版本有关
- 我对你的gdb案例中的信息输出感到有点惊讶。它将断点的行号显示为“3”。理想情况下应该是4
排除上述其他两种选择。刚才注意到您的linux运行在一个docker上。在本例中,您的测试程序是一个在docker上运行的进程,我假设gdb是在本机上调用的。您可能需要使用lxc-attach将docker连接到gdb,这可能不是您的主要问题,但
out。对于可执行文件,a
是一个非常糟糕的命名选择。看起来与此问题非常类似。试试docker run--privileged
@PaulR:这只是著名的a.out
的一个笑话,我认为GDB不会把它当作一个静态库:)可能不是你的主要问题,但是out。a
对于一个可执行文件来说是一个非常糟糕的命名选择。看起来与这个问题非常类似。试试docker-run--privileged
@PaulR:这只是著名的a.out
的一个笑话,我想GDB不会把它当作静态库:)
(gdb) file out.a
(gdb) b main
Note: breakpoint 1 also set at pc 0x40084a.
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040084a in main() at hello.cc:3
(gdb) r
hello world!
During startup program exited normally.