21

我正在使用 gdb 调试 C 项目源代码。我编译如下:

./configure --enable-debug CFLAGS="-g -o0" 
make --debug=a

我想在特定文件处停止调试。所以当我通过使用设置断点时

(gdb) break main.c:672

它说:

No source file named main.c.

即使我将特定的函数名(在 main.c 文件中)传递给 break 。它说:未定义此类功能。

我当前的目录有这个 main.c 文件。我在 Windows 上使用 Cygwin。当我使用设置断点时

(gdb) break main

它在 Cygwin 文件的主要功能处设置断点,而不是在我的源代码中。

  1. 我该如何解决我的第一个问题?

  2. 只是好奇,如果 Cygwin 文件和我的源代码中有相同的函数名,如何避免第二个问题?

4

5 回答 5

13

编译.c文件时,请确保使用:

gcc filename.c -g 

gdb <binary name>

搜索加载调试符号是否完成?

如果不:

gdb) symbol-file <path-of-symbol-file>

您可以在 obj 目录中找到符号文件

于 2013-10-03T05:52:48.023 回答
5

如果您正在编译-g并且仍然无法设置断点,请尝试添加raise(SIGTRAP)您的main(),在 gdb 中运行该进程,然后在遇到SIGTRAP.

于 2014-09-22T17:54:20.743 回答
3

关键是编译期间的 gcc 参数 -g。

其他一切都是次要的。

查看GDB 中的断点

于 2014-04-28T17:36:46.910 回答
3

我之前也遇到过类似的问题。我刚刚删除了.metadata文件夹并再次导入了特定项目,效果很好。

于 2016-07-10T09:09:21.187 回答
2

每当您必须使用 GDB 时,请在命令行中键入以下内容

gcc -g -o outputfile sourcefile.c

现在输入

gdb -tui outputfile

然后输入break命令

于 2013-10-03T06:04:37.830 回答