C++ C/C++;远程编译,使用ELF的本地调试会话(嵌入式,Cortex-M)

C++ C/C++;远程编译,使用ELF的本地调试会话(嵌入式,Cortex-M),c++,c,eclipse,C++,C,Eclipse,我在笔记本上用C/C++编写了很多代码。不幸的是,在编译方面,双核有其局限性,我经常这样做。但优点是我是移动的,可以随身携带调试器(usb j-link)(不,ethernet-j-link选项太贵了) 我有一个24核的服务器。我想使用服务器进行编译,然后将编译后的文件(主要是ELF)复制到本地机器上进行调试 两台机器都使用Ubuntu(笔记本电脑使用Ubuntu Budge,服务器使用Ubuntu服务器) 遗憾的是,EclipseGDB(Atolic 8.1)不再能够将二进制地址映射到图形调试

我在笔记本上用C/C++编写了很多代码。不幸的是,在编译方面,双核有其局限性,我经常这样做。但优点是我是移动的,可以随身携带调试器(usb j-link)(不,ethernet-j-link选项太贵了)

我有一个24核的服务器。我想使用服务器进行编译,然后将编译后的文件(主要是ELF)复制到本地机器上进行调试

两台机器都使用Ubuntu(笔记本电脑使用Ubuntu Budge,服务器使用Ubuntu服务器)

遗憾的是,EclipseGDB(Atolic 8.1)不再能够将二进制地址映射到图形调试器中的源文件(可以理解)

我想知道图形调试器如何能够将地址映射到文本(src)。
此路径信息是否在ELF文件中?如果是这样,我如何更正它,以便远程编译的二进制文件能够在我的笔记本上调试运行?

在gdb中,您可以执行以下操作:

定义源路径替换规则,并将其添加到 现有替换规则的当前列表。如果规则与 如果已定义了,则旧规则也将被删除。对于 例如,如果文件/foo/bar/baz.c被移动到/mnt/cross/baz.c, 然后,命令(gdb)设置替换路径/foo/bar/mnt/cross将 告诉GDB将“/foo/bar”替换为“/mnt/cross”,这将允许GDB 查找文件baz.c,即使它已被移动。如果更多 已定义多个替换规则,将对这些规则进行求值 按照定义的顺序逐一列出。第一个 选择匹配(如果有)以执行替换。对于 例如,如果我们输入了以下命令:(gdb)set 替换路径/usr/src/include/mnt/include(gdb)集 然后,替换路径/usr/src/mnt/src-GDB将重写 /通过使用第一个 规则。然而,它将使用第二条规则来重写 /usr/src/lib/foo.c转换为/mnt/src/lib/foo.c


1.您确定在复制时不剥离二进制文件吗?2.您是否尝试在两台计算机上使用相同的存储库路径?您可以尝试使用distcc@max630我用md5验证过,是同一个文件。我没有尝试使用相同的路径,好主意。我会这样做的。非常感谢。对于一个有点网络知识的嵌入式软件工程师来说,设置distcc是困难的吗?你的经验如何?我实际上没有在任何项目中使用distcc。也许试过了,我不记得了。我使用了ccache,通常集成这样的包装器是非常简单的——您可以在Makefile中替换CC或其他变量。如果您是嵌入式工程师,您应该熟悉自定义编译器,它没有太大区别。