0

我正在使用几台freebsd机器,它们都是相同的版本,

10.3 版 i386。并通过端口在每台机器上安装distcc,

/usr/ports/devel/distcc/.

我认为 distcc 版本是 distcc-3.1,因为 /usr/ports/distfiles/ 中有 distcc-3.1.tar.bz2 文件。

任何编译都非常成功,即使以我预期的非常快的方式进行。

但是在我尝试在 gdb 中设置断点后,它无法捕获项目的任何源文件。

这可能是 distcc / distccd 在机器之间提供和接收的临时文件(例如'distccd_xxxxxx.ii')的结果。

我在 gdb 中尝试过 'directory' 命令,但这还不够,因为我的文件树太复杂而且太大了。

当我在没有 distcc 的情况下在本地编译它时,gdb 就很好。

有什么解决方案可以打破我的处境吗?

4

1 回答 1

0

你看过 distcc FAQ 中的条目吗?https://github.com/marksatt/distcc/blob/master/doc/web/faq.html

不幸的是,这是由 gcc 中的一个错误引起的,我希望在未来的版本中修复它。gcc 嵌入了运行编译器 (cc1) 的目录,而它确实应该记录源代码来自的目录。

您现在可以通过使用 gdb 中的“目录”命令告诉它在哪里找到源代码,或者在编译时传递一个绝对文件名来解决它。

Tim Janik 有一个非官方的 distcc 补丁可以解决这个问题,但我认为我不会合并它,因为最好在 gcc 中修复它。

这是 Debian #148957

在 gcc-patches 邮件列表中 有关于这个错误的讨论。
这可能会影响其他依赖调试 stabs 的程序,例如 addr2line,并导致目标文件在包含源目录时不是逐字节相同的。同样的错误影响ccache

补丁似乎现在在这里:http ://testbit.eu/~timj/patches/

于 2016-05-27T13:43:42.090 回答