我正在使用gdb来调试C项目源代码。我编译如下:
./configure --enable-debug CFLAGS="-g -o0"
make --debug=a
我想在特定文件中调试stop。所以当我使用
设置断点时(gdb) break main.c:672
它说:
No source file named main.c.
即使我传递特定的函数名称(在main.c文件中)也要中断。它说:这种功能没有定义。
我当前的目录有这个main.c文件。我在Windows上使用Cygwin。当我使用
设置断点时(gdb) break main
它在Cygwin文件的主要功能中设置了断点,而不是在我的源代码中。
如何解决我的第一个问题?
好奇,如果在Cygwin文件和我的源代码中有相同的函数名,如何避免第二个问题?
答案 0 :(得分:7)
编译.c
文件时,请确保使用:
gcc filename.c -g
gdb <binary name>
搜索是否已完成加载调试符号?
如果不是:
gdb) symbol-file <path-of-symbol-file>
你可以在obj目录中找到符号文件
答案 1 :(得分:3)
答案 2 :(得分:3)
我之前也遇到过类似的问题。我刚刚删除了 .metadata 文件夹并再次导入了特定项目,并且运行良好。
答案 3 :(得分:2)
如果您正在使用-g
进行编译但仍无法设置断点,请尝试在raise(SIGTRAP)
中添加main()
,在gdb中运行该过程,然后设置所需的断点再次点击SIGTRAP
后。
答案 4 :(得分:1)
每当您必须使用GDB时,请在命令行中键入以下内容
gcc -g -o outputfile sourcefile.c
现在输入
gdb -tui outputfile
然后输入break命令