rew*_*wbs 16 linux windows gdb eclipse-cdt gdbserver
我在Windows上运行Eclipse CDT来开发在远程Linux系统上构建和测试的C代码.目前,代码永远不会在Windows上编译.
我能够使用CDT在gdbserver下的Linux目标上开始远程进程,然后从Windows主机上附加gdb.但是,gdb会立即失败并出现以下错误:
warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB. Attempting to continue with the default i386 settings.
[...]
Remote 'g' packet reply is too long: 74afe9bff0aee9bf02000000f4af4a00a0aee9bf[...]
Run Code Online (Sandbox Code Playgroud)
两个Linux系统之间的调试工作正常,所以很明显我在Windows主机端做错了.我的具体问题是:
Cygwin的gdb版本是否足以调试远程Linux进程,或者我是否需要一个特殊的交叉gdb才能在Windows上运行它并使用Linux进程?如果是这样,我可以在任何地方获得这样的gdb吗?
使用gdb进行远程调试需要在主机系统上提供符号.实现这一目标的最简单方法是什么?我可以将Linux目标上的构建产生的符号复制到Windows主机,还是必须在Windows上进行完整构建?有没有办法避免这个要求,这样我才能在目标上提供符号?
谢谢,
-R
更多信息:将RSE常见问题提供了一些三分球,但不幸的是,我仍然受阻.FAQ描述了两种方法:
小智 5
现在有一个插件 http://marketplace.eclipse.org/content/direct-remote-c-debugging
这允许您通过 ssh 在服务器上远程启动 gdb。它负责路径映射和其他事情。
您不需要远程运行 gdb 服务器
只需在目标平台支持下重建gdb。您可以为此使用Cygwin。RHEL目标平台的示例:
> wget http://ftp.gnu.org/gnu/gdb/gdb-<ver>.tar.xz
> tar -xJvf gdb-<ver>.tar.xz
> mkdir -p gdb-<ver>/build/x86_64-redhat-linux-gnu
> cd gdb-<ver>/build/x86_64-redhat-linux-gnu
> ../../configure --target=x86_64-redhat-linux-gnu
> make && make install
> x86_64-redhat-linux-gnu-gdb.exe --version
Run Code Online (Sandbox Code Playgroud)
之后不要忘记重新配置您的工具链。要获取目标配置名称,可以使用:
> echo ${BASH_VERSINFO[5]}
Run Code Online (Sandbox Code Playgroud)
我在 Windows 上构建失败,但发现在 Linux 下构建它非常容易。总结并完成@Eugene 回复:首先,准备来源:
wget http://ftp.gnu.org/gnu/gdb/gdb-<ver>.tar.xz
tar -xJvf gdb-<ver>.tar.xz
mkdir -p gdb-<ver>/build/x86_64-redhat-linux-gnu
cd gdb-<ver>/build/x86_64-redhat-linux-gnu
Run Code Online (Sandbox Code Playgroud)
下载Windows编译器:
sudo apt-get install mingw-w64
Run Code Online (Sandbox Code Playgroud)
检查您想要调试二进制文件的目标配置平台(在 --target 参数中放入什么内容):
echo ${BASH_VERSINFO[5]}
Run Code Online (Sandbox Code Playgroud)
准备针对您所需平台但在不同主机上运行的 makefile。我们将其编译为静态,以便它不依赖于任何 DLL 或其他库。此外,我们还按照gdb wiki 的建议禁用构建其他二进制文件:
../../configure --host=x86_64-w64-mingw32 --target=x86_64-pc-linux-gnu --enable-static=yes --disable-interprocess-agent --disable-binutils --disable-ld --disable-gold --disable-gas --disable-sim --disable-gprof
Run Code Online (Sandbox Code Playgroud)
最后,构建(大约需要 30-60 分钟):
make LDFLAGS=-static
Run Code Online (Sandbox Code Playgroud)
您可以在 gdb 文件夹中找到您的调试器。最好去掉它的调试符号,因为构建可执行文件后会很大:
strip -s gdb/gdb.exe
Run Code Online (Sandbox Code Playgroud)
瞧!gdb.exe 准备在 Windows 中运行并远程调试 Linux 可执行文件!
使用 gcc/gdb 设置交叉编译或交叉调试环境是一个非常困难的问题,而且它几乎从来都不是最有效的解决方案。在你的 Windows 机器上放置一个 Linux 虚拟机并在那里进行调试,工作量会少得多。如果您确实需要在“那边”进行调试,我建议您只使用 ssh 并使用命令行 gdb。如果您那里没有源代码,那么从您控制下的 Linux VM 进行远程调试将是实用的。
归档时间: |
|
查看次数: |
13452 次 |
最近记录: |