1

我正在使用 gdb 进行调试,出现分段错误,然后我想在 main 函数中设置另一个断点并从头开始运行程序,尽管我已经完成了当前运行并且它显示“程序不是正在运行”

当我输入“列表”时

它显示了一个库文件的代码片段,这意味着目前我不在主函数中

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

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

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

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

4

3 回答 3

1

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

于 2013-03-15T12:35:14.180 回答
0

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

于 2013-03-15T13:22:40.763 回答
0

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

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

  1. -g使用调试信息( gcc 选项)从头开始重建程序。重置断点并注意来自 gdb 的任何警告。
  2. 如果程序仍然崩溃并设置断点,main请查看堆栈跟踪(btgdb 中的命令)。它可能以前发生过main,您不会main在堆栈跟踪中看到。
于 2013-03-16T09:05:58.217 回答