我正在x86_64工作站上使用Ubuntu 16.04,并且正在用C ++交叉编译一个小型演示程序,并将其部署到运行ARM体系结构(environment-setup-cortexa9hf-neon-poky-linux-gnueabi
,arm-poky-linux-gnueabi-g++
)的嵌入式linux目标上
我能够成功做到这一点,这使我可以在命令行上进行调试会话:
目标:
rpm -ivh gdbserver-7.10.1-r0.cortexa9hf_neon.rpm
gdbserver :9091 ${APPNAME}
主机:
sudo apt-get install gdb-multiarch
gdb-multiarch $APPNAME
target remote 192.168.0.212:9091
... 我现在可以在命令行上使用gdb-multiarch了!
但是从这里开始...我真的很想能够使用许多gdb
前端工具之一来提供GUI来设置断点并逐步执行代码(类似于gdbgui
,或者使用vscode
并配置调试器)。是否有专门支持gdb
的{{1}}前端工具?
我尝试使用的任何工具,我相信无论它使用什么基础gdb可执行文件,都会由于体系结构不匹配而出现此错误:
gdb-multiarch
更新1-
我可以使用 target remote 192.168.0.212:9091
Remote debugging using 192.168.0.212:9091
warning: Architecture rejected target-supplied description
Remote 'g' packet reply is too long: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070fdff7e00000000c0fafc76100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
工具使它工作:
ddd
但是!这是古老的越野车,现在我无法在已加载的.so中设置断点。
我尝试了ddd --eval-command="target remote $MY_TARGET_IP:9091" --debugger gdb-multiarch
及其选项来指定调试器,但目前也无法正常工作。我在此处提交了功能请求报告:
答案 0 :(得分:2)
我找到了使用gdbgui
的方法,但是这需要我根据我的特定远程目标体系结构从源代码重建gdb。我如何使其工作的详细信息在这里:
https://github.com/cs01/gdbgui/issues/237
以上链接断开时的重要位: TLDR解决方案:
我试图从ubuntu apt repos依赖于预构建gdb-multiarch,但没有用。当我决定下载gdb并在配置arm-linux-gnuabi目标架构时从源代码重建时。
构建方法:
下载了最新的gdb源代码
将其解压缩,进入文件夹,然后像这样构建它:
./configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --target=arm-linux-gnuabi && make -j8 && sudo make install
重要的是要注意,对于我的特定远程gdb服务器,它正在ARM上运行,因此我必须在configure中说target=arm-linux-gnuabi
。 GDB正在为我的PC x86架构构建,但是它知道在调试时将目标识别为ARM!
现在,arm-linux-gnuabi-gdb
默认安装为/usr/local/bin
...,但是您可以在上面的prefix=<path>
脚本中将./configure
提供到您希望安装的位置。< / p>
使用此方法,我能够构建名为arm-linux-gnuabi-gdb
的gdb的辅助副本,它可以像这样馈送到gdbgui
:
gdbgui -g arm-linux-gnuabi-gdb
从那里,我可以给gdb命令连接到我的远程gdbserver。我必须事先设置断点。我的gdb
命令就像这样来设置一些断点:
set breakpoint pending on
break my_object.cpp:<line number for breakpoint>
b example_function_name
target remote <remote arm machine IP>:<gdbserver port>
c
效果很好!这比在远程目标上的命令行上运行gdb更好。