18

我有一个带有共享库(动态加载)的项目,我正在尝试调试它。我收到以下错误消息:

No source file named /home/username/Code/path/to/project/MyFile.cpp.

在搜索了其他线程之后,我确保我正在使用 -g 进行编译,并且相应的文件夹位于调试配置的源路径选项卡上。奇怪的是它给出了正确的绝对路径:它引用的文件确实存在,所以我不明白为什么它认为它不存在。

有人知道该怎么做吗?

4

7 回答 7

24

我刚刚遇到了同样的问题,尽管我的断点在可执行文件本身中,而不是在共享库中。为了解决这个问题,我不得不打开“调试配置”,选择我的调试配置并调整以下设置:

  • 在底部,有一个链接“选择其他...”来选择创建进程启动器。点击链接。勾选“使用配置特定设置”。选择“标准创建流程启动器”,然后按“确定”。
  • 转到“调试器”选项卡,然后在选项卡顶部选择“调试器:gdb/mi”。可能/可能不会有所不同:在同一个选项卡上还有一个复选框“使用完整文件路径设置断点” - 我玩过这个,但它似乎不会影响我们观察到的问题(显然,我们的源路径已经是完整的路径)。

对于共享库中的断点,您可能需要使用 eclipse cdt 和 gdb 进行调试以及为什么 eclipse cdt 忽略断点的其他信息(尤其是关于延迟断点)。

注意:这是指 Eclipse Kepler (4.3) 和 gdb 7.4。

于 2012-10-26T11:22:46.160 回答
2

我有同样的问题,但就我而言,这是我的错。我的一些项目设置为Release配置,调试器自然找不到源文件信息。

于 2015-06-12T08:00:55.843 回答
1

我有同样的问题。我无法在共享库文件 (.so) 中设置断点,该文件在与我的程序不同的位置编译。要解决这个问题:

  1. 转到调试配置,源选项卡
  2. 添加一个编译目录(我使用了编译所有进程的主makefile的位置,而不是这个进程的makefile所在的位置)。
  3. 也点击“子目录也用于编译”(我的子进程makefile编译在主位置的子目录中)

我还没有想出如何对未来和过去的所有调试配置进行此更改,这样我就不必每次都添加这个目录,但如果我弄清楚了,我会在以后尝试更新。

于 2015-12-17T16:45:43.237 回答
0

我有同样的问题,但我的解决方案不同。打开项目 "debug/src" + "release/src" 目录并确保没有 [filename].d 文件包含任何可能已更改名称或不再存在的源文件的名称。我有一个,删除它,因为没有更多的错误。

因此,至少在我的情况下,我假设错误是由超出范围的对象创建的。

于 2014-08-08T10:28:26.760 回答
0

如果您同时拥有 cygwin 和 mingw(或其他一些变体),就会发生这种情况。如果来自 cygwin 的 gcc 用于编译源代码,您将在可执行文件中有 cygwin 路径。然后,如果调试器来自 mingw,gdb 将无法解释 cygwin 路径。解决此问题的最简单方法是转到运行 -> 调试配置 -> 调试器并将完整路径设置为 cygwin gdb (C:\cygwin64\bin\gdb.exe)。这为我解决了问题。

于 2016-11-15T16:29:51.400 回答
0

我在调试配置设置中按照@Andreas Fester 对调试器选项卡的评论,但找不到“调试器:gdb/mi”,但在源选项卡中,我删除了所有项目并通过单击“添加.. ." 窗口右侧的按钮。这帮助我解决了这个问题

于 2018-02-15T20:50:43.180 回答
-1

对于 Makefile 项目现有代码。第 1 步检查使用 -g -o0 编译所有源 第 2 步使用 gdbserver 和 arm-yourversion-gdb,它们将在您的 sdk 和 gdb 工具链中提供。

于 2016-05-27T12:21:04.410 回答