Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用gdb调试chrooted程序_C++_Linux_Debugging_Gdb_Chroot - Fatal编程技术网

C++ 用gdb调试chrooted程序

C++ 用gdb调试chrooted程序,c++,linux,debugging,gdb,chroot,C++,Linux,Debugging,Gdb,Chroot,我的情况是,我必须调试的程序必须在chrooted环境中运行。现在,我已经在另一个根目录中安装了gdb,并复制了源代码,这对于一个基本的设置是有效的,但不是很方便,因为我必须在任何时候进行更改和重新编译时重新同步源代码,并且必须复制我的所有gdb设置,等等 有没有办法在我的正常环境中运行调试器,调试在chrooted环境中运行的程序?我使用的是Arch Linux。您可以使用远程调试: 在chroot中,您只需要通常的运行时加上程序gdbserver。然后运行: chroot$ gdbserve

我的情况是,我必须调试的程序必须在chrooted环境中运行。现在,我已经在另一个根目录中安装了gdb,并复制了源代码,这对于一个基本的设置是有效的,但不是很方便,因为我必须在任何时候进行更改和重新编译时重新同步源代码,并且必须复制我的所有gdb设置,等等


有没有办法在我的正常环境中运行调试器,调试在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:这是一个输入错误,请参阅更新的答案。