gpt4 book ai didi

c++ - 如何在带有 GDB GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb session ?

转载 作者:太空狗 更新时间:2023-10-29 12:09:21 24 4
gpt4 key购买 nike

我在 x86_64 工作站上使用 Ubuntu 16.04,我正在用 C++ 交叉编译一个小型演示程序,并将其部署到运行 ARM 架构的嵌入式 linux 目标(environment-setup-cortexa9hf-neon-poky -linux-gnueabi, arm-poky-linux-gnueabi-g++).

我能够成功地执行此操作,这为我提供了一个命令行调试 session :

目标:

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-multiarchgdb 前端工具?

我尝试过的任何工具,我相信无论它使用什么基本 gdb 可执行文件并由于不匹配的体系结构而给出此错误:

    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

更新 1 --

我可以使用 ddd 工具让它工作:

ddd --eval-command="target remote $MY_TARGET_IP:9091"--debugger gdb-multiarch

但是!这是古老且有缺陷的,我无法在已加载的 .so 中设置断点。

我尝试了 gdbgui 及其指定调试器的选项,但目前也不起作用。我在这里提交了一份功能请求报告:

https://github.com/cs01/gdbgui/issues/237

最佳答案

我找到了使用 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 上运行,所以我不得不说 target=arm-linux-gnuabi在配置中。 GDB 正在为我的 PC x86 arch 构建,但它知道在调试时将目标识别为 ARM!

现在,arm-linux-gnuabi-gdb默认安装到 /usr/local/bin ... 但您可以改为提供 prefix=<path>./configure 中您希望它安装的位置上面的脚本。

使用它,我能够构建一个名为 arm-linux-gnuabi-gdb 的 gdb 的辅助拷贝我可以喂给gdbgui像这样:

gdbgui -g arm-linux-gnuabi-gdb

从那里,我可以给 gdb 命令来连接到我的远程 gdb 服务器。我必须事先设置断点。我的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 要好得多。

关于c++ - 如何在带有 GDB GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com