C 如何在gdb中返回到main函数

C 如何在gdb中返回到main函数,c,gdb,C,Gdb,我正在使用gdb进行调试 我得到一个分段错误,然后我想在主函数中设置另一个断点,并从一开始运行程序 然而,尽管我已经完成了当前的运行 它显示“程序没有运行” 当我输入“列表”时 它显示了库文件的代码片段 这意味着目前我不在主功能中 如果我重新运行程序,即使我在main()的开头设置了断点 它仍然会出现分段错误,这意味着程序正在库文件中运行 那么如何返回main()函数呢? 谢谢 提示:我正在使用libpcap.h,在编译时有一个'-lpcap'选项 顺便说一句,当我使用break 9时 要将断点

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

当我输入“列表”时

它显示了库文件的代码片段 这意味着目前我不在主功能中

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

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

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

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

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

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

“顺便说一句,当我使用break 9将断点设置为9时,gdb将程序运行到第11行”-根据此信息和您提供的其他信息,听起来可能源代码与gdb的地址到源行的映射不同步。你有没有编辑过这个节目?您是否重新编译并重新启动了gdb?你看到过类似于“可执行文件比源文件更新”的警告吗?

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

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

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

  • 使用调试信息从头开始重建程序(
    -g
    gcc选项)。重置断点并观察来自gdb的任何警告
  • 如果程序仍然崩溃,断点设置在
    main
    上,请查看堆栈跟踪(
    bt
    gdb中的命令)。它可能发生在
    main
    之前,您将不会在堆栈跟踪中看到
    main
  • 如果我重新运行程序,即使我在 main()的开头仍然有分段错误,这意味着 程序正在库文件中运行

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

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

  • 重新运行不起作用,即使我在main()的开头设置了断点。真奇怪!重新运行不起作用,即使我在main()的开头设置了断点。真奇怪!可能segfault在程序到达
    main
    之前就发生了。这怎么可能呢?对于第一次运行,在主功能中的第32行之前是正常的,可能在程序到达
    main
    之前发生SEGFULT。这怎么可能?对于第一次运行,它是正常的,直到主函数中的第32行我重新编译它并重新启动gdb,问题仍然存在!我重新编译并重新启动了gdb,问题依然存在!