如何在gdb中返回main函数

时间:2013-03-15 12:33:06

标签: c gdb

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

当我输入' list'

它显示了一个libarary文件的代码片段 这意味着目前我不在主要功能

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

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

提示:我使用的是libpcap.h,我有一个' -lpcap'编译时的选项

BTW,当我使用break 9 将断点设置为9,gdb将程序运行到第11行?这种不准确有什么问题?谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

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

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

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