【发布时间】:2020-11-25 13:34:33
【问题描述】:
我正在使用 docker 中的 gcc 为 arm 控制器构建我的 c/c++ 应用程序。与 .hex 和 .bin 文件一起生成的还有 .elf 文件。一旦生成,它们都会从容器中导出到主机。现在我想用 openocd、arm-none-eabi-gdb 和 eclipse cdt 调试应用程序。我可以在目标板上启动调试会话,但是当我停止调试器(或者它在 main 启动时停止)时,它无法找到要显示的源文件:
Can't find a source file at "/usr/src/Testbench/LIBS/Shell/shell.c"
这里的路径是docker容器中的构建项目之一,与现在所有文件所在主机上的新调试项目无关。 我试图在 Eclipse 中编辑源查找路径,但没有成功,我可以找到该文件,然后它只适用于该文件。也指定文件夹不起作用。无论如何,始终为项目中的所有文件/文件夹手动执行此操作不是一种选择。
解决方案应该是“脚本化的”,因为所有这些都是 CI/devops 概念的一部分。
似乎“错误”的路径是硬编码在 elf 文件中的。是否有(脚本)方法来更改该路径以匹配实际项目位置,以便 eclipse 和 gdb 按预期工作,并且开发人员可以在调试时看到调试信息?
它应该可以在 Linux 和 Windows 上运行 ;-)
提前感谢您的帮助
马丁
【问题讨论】:
-
嗨@MarkPlotnick 感谢您的回答,我这样做了,gdb 没有错误地接受了该命令,但是当我再次启动调试过程时,它仍然显示相同的错误路径错误。启动调试 jop 时是否需要将此命令传递给 gdb?如果是这样,也许您知道在 Eclipse 中是如何完成的?
-
您可以将 gdb 命令放在主目录的
.gdbinit中,每次启动 gdb 时它们都会运行。您还可以通过使用-ex "command"选项启动 gdb 来让 gdb 执行单个命令。我不知道如何让 Eclipse 在与可执行文件中的路径不同的地方查找源文件。 -
嗨@MarkPlotnick,我添加了标志“设置替代路径/usr/src//home/martin/C_Projects/”,如果我在其中输入了一点错字,错误会显示正确的路径除错字外的来源。如果我修正错字,则会出现以下错误: No source available for "(gdb[1].proc[42000].threadGroup[i1],gdb[1].proc[42000].OSthread[1]).thread[1 ].frame[0]"
-
所以 (gdb[1] ... 错误消失了,我可以如上所述更改路径。但是无论我插入的路径是错误的,即使是绝对正确的绝对路径也不起作用,或者项目或工作区的相对路径不起作用。想法用完了 :-(
标签: eclipse debugging gdb elf debug-information