【问题标题】:how to return to main function in gdb如何在gdb中返回主函数
【发布时间】:2013-03-15 12:33:05
【问题描述】:

我正在使用 gdb 进行调试 我得到一个分段错误,然后我想在主函数中设置另一个断点并从头开始运行程序 然而,虽然我已经完成了当前的运行 它显示“程序没有运行”

当我输入“列表”时

它显示了一个库文件的代码 sn-p 这意味着目前我不在主要功能中

如果我重新运行程序,即使我在 main() 开头设置了断点 它仍然出现分段错误,这意味着程序正在库文件中运行

那么如何返回main()函数呢? 谢谢!

提示:我正在使用 libpcap.h,并且在编译时我有一个“-lpcap”选项

顺便说一句,当我使用 break 9 时 在 9 处设置断点,gdb 将程序运行到第 11 行?这种不准确有什么问题?谢谢!

【问题讨论】:

  • 可能在程序到达main之前就发生了段错误。
  • 这怎么可能?第一次运行,直到主函数中的第 32 行都可以

标签: c gdb


【解决方案1】:

只需重新发出run 命令。您将丢失程序状态,但不会丢失似乎符合您需要的断点。

【讨论】:

  • 重新运行不起作用,即使我在 main() 的一开始就设置了断点。很奇怪!
【解决方案2】:

“顺便说一句,当我使用 break 9 在 9 处设置断点时,gdb 将程序运行到第 11 行” - 从这里以及您提供的其他信息来看,听起来源代码可能已经出与 gdb 将地址映射到源行的同步。你有没有机会编辑程序?你有没有重新编译它并重新启动gdb?您是否看到过类似“可执行文件比源文件更新”的警告?

【讨论】:

  • 我重新编译并重启gdb,问题依旧!
【解决方案3】:

如果我重新运行程序,即使我在 main() 的开头仍然出现分段错误,这意味着 程序正在库文件中运行

实际上这意味着您要么未能在main函数上设置断点,要么程序执行未到达main并出现分段错误。请尝试以下步骤:

  1. 使用调试信息从头开始重建程序(-g gcc 选项)。重置断点并观察来自 gdb 的任何警告。
  2. 如果程序仍然崩溃并在main 上设置断点,请查看堆栈跟踪(gdb 中的bt 命令)。它可能发生在 main 之前,您不会在堆栈跟踪中看到 main

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 2012-11-23
    • 1970-01-01
    • 2015-05-11
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多