【问题标题】:No source file named main.c. gdb break point setting没有名为 main.c 的源文件。 gdb断点设置
【发布时间】:2013-10-03 05:44:23
【问题描述】:

我正在使用 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 文件和我的源代码中的函数名相同,如何避免第二个问题?

【问题讨论】:

    标签: c gdb cygwin breakpoints


    【解决方案1】:

    当你编译你的 .c 文件时,确保你使用:

    gcc filename.c -g 
    
    gdb <binary name>
    

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

    如果没有:

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

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

    【讨论】:

    • 从 .libs/slim 中读取符号...完成。它显示了该消息,我认为加载符号是可以的。
    • 你可以发布整个问题的快照意味着你是如何编译的
    • 我添加了编译信息,请查看
    • 只检查你必须添加进程ID的符号文件
    • 我没有看到任何这样的文件。该文件的扩展名是什么?我没有 obj 目录。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      编译时关键是gcc参数-g。

      其他都是次要的。

      breakpoints in GDB

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          当你必须使用 GDB 时,在命令行中输入以下内容

          gcc -g -o outputfile sourcefile.c
          

          现在输入

          gdb -tui outputfile
          

          然后输入break命令

          【讨论】:

          • gdb -tui 输出文件。我运行它,它在终端顶部打开了一个区域,它有消息“没有可用的源”。之后我尝试设置中断,并且相同的“没有名为 main.c 的源文件”。消息。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-29
          • 2011-11-19
          • 2010-12-01
          • 2015-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多