C++ 用gdb调试chrooted程序
我的情况是,我必须调试的程序必须在chrooted环境中运行。现在,我已经在另一个根目录中安装了gdb,并复制了源代码,这对于一个基本的设置是有效的,但不是很方便,因为我必须在任何时候进行更改和重新编译时重新同步源代码,并且必须复制我的所有gdb设置,等等C++ 用gdb调试chrooted程序,c++,linux,debugging,gdb,chroot,C++,Linux,Debugging,Gdb,Chroot,我的情况是,我必须调试的程序必须在chrooted环境中运行。现在,我已经在另一个根目录中安装了gdb,并复制了源代码,这对于一个基本的设置是有效的,但不是很方便,因为我必须在任何时候进行更改和重新编译时重新同步源代码,并且必须复制我的所有gdb设置,等等 有没有办法在我的正常环境中运行调试器,调试在chrooted环境中运行的程序?我使用的是Arch Linux。您可以使用远程调试: 在chroot中,您只需要通常的运行时加上程序gdbserver。然后运行: chroot$ gdbserve
有没有办法在我的正常环境中运行调试器,调试在chrooted环境中运行的程序?我使用的是Arch Linux。您可以使用远程调试: 在chroot中,您只需要通常的运行时加上程序
gdbserver
。然后运行:
chroot$ gdbserver :8888 myprogram
在开发环境中,从源目录运行gdb
,并将其连接到服务器
$ gdb myprogram
(gdb) target remote :8888
然后就可以开始调试了
我喜欢在继续之前执行br main
,因为调试器将在\u start
中停止,太早了,没有用处
PS:使用远程调试时请注意安全问题,因为8888是一个侦听TCP端口。如果chroot可以访问环回网络,则可以使用远程调试。使用远程调试时,源查找是在客户端还是服务器端?当然是客户端!服务器端只需要gdbserver
和运行时环境。从技术上讲,它甚至不需要调试符号。谢谢!你应该把它写成一个实际的答案,而不是一个注释。请尝试“帮助”。
是否需要特定版本的gdb?编辑:从gdb/gdbserver 7.9.1版开始,命令是target remote:8888
@DarkFranX:这是一个输入错误,请参阅更新的答案。