【问题标题】:How do you use gdb?你如何使用gdb?
【发布时间】:2009-06-08 19:09:54
【问题描述】:

我决定了解我们的 C/C+ *nix 实践者如何使用 gdb 调试器。

这是我通常使用的:

  1. b - 中断 filename.c:line #, function, filename.cpp:function, className::Member
  2. n, c, s -- 下一步继续
  3. gdb 程序名 => 设置断点 ==> 运行[参数列表](我这样做是为了在程序启动前设置断点)
  4. l - 列出周围的源代码。
  5. 附加进程ID 6 休息 [地点]
  6. gdb programName corefile.core(检查应用崩溃的原因)
  7. 我有时也会在退出函数(break exit)处设置断点来检查程序堆栈
  8. info b 检查所有断点
  9. 清除[断点列表]

你如何使用它?

【问题讨论】:

  • 这很有帮助。为什么不至少让它成为一个社区维基?

标签: c++ c gdb


【解决方案1】:

除了已经发布的东西我还使用:

  • 用于 STL 容器的 .gdbinit 文件
  • signal SIGNAL noprint nostop 用于调试时不感兴趣的一些自定义信号
  • C-Cast 以取消引用指针
  • 捕捉点(接球,接球)
  • condition 用于条件断点和观察点
  • 很少gdbserver用于远程调试
  • gdb program coredump,对于那些令人尴尬的段错误;)

PS:顺便说一句,我个人喜欢 gdb 的原因之一。是它支持几乎所有东西的制表符补全(gdb 命令、符号表中的符号、函数、成员函数等)。在我看来,这是一个相当不错的生产力提升。

【讨论】:

    【解决方案2】:

    Scripting 是一个不错的 GDB 功能。

    1. 首先设置断点,例如:b someFunction\n。
    2. 然后运行命令:commands\n。 GDB 将请求该断点的命令。
    3. 常见的场景是打印一些值然后继续,所以你会输入:p someVar\n continue\n。
    4. 要结束脚本,请按:Ctrl-D

    运行程序后你会看到你的脚本偶尔会在断点发生时执行。

    【讨论】:

    • 要获得更好的 gdb 和更好的脚本支持,请参阅 PythonGdb - gdb scritable in python
    【解决方案3】:

    我认为最有用的 gdb 命令(除了所有已经列出的):

    • 线程信息 - 关于线程的信息
    • 线程N - 切换到线程N
    • catch throw - 中断任何抛出的异常。当您仅在堆栈展开后发现错误时很有用。
    • printf,print - 检查所有表达式,printf 接受 C 风格的格式说明符

    最后,如果通过慢速链接进行调试,则可能会使用文本 UI。要使用它,请使用 --tui 命令行开关启动 gdb。

    【讨论】:

      【解决方案4】:

      gdb 不是我的专长,但这是我使用的:

      • bt列出一个堆栈
      • up, down 在堆栈中移动
      • until 继续直到到达数量大于当前的行——用于退出循环
      • watch [expr] expr 变化时中断程序

      ...但我主要使用 ddd 作为 gdb 的前端

      【讨论】:

      • 我也使用 ddd :)...欢迎和鼓励任何有关 ddd 的提示...谢谢
      【解决方案5】:

      键入 Ctrl-X Ctrl-A 打开一个带有源代码预览的简单窗口。

      【讨论】:

        【解决方案6】:

        前段时间我发现了cgdb:

        http://cgdb.sourceforge.net/

        这是一个基于 curses(颜色控制台)的 gdb 前端,当我被限制在控制台窗口中进行调试时,它让我的生活变得更加快乐。

        【讨论】:

          【解决方案7】:

          【讨论】:

          • 您会推荐用户指南中的具体提示吗?谢谢
          【解决方案8】:

          还有一些与调试没有直接关系的用途。例如它 可用于 C 表达式求值:

          (gdb) printf "%lu\n", (unsigned long)(-3L) 4294967293

          【讨论】:

            【解决方案9】:

            我使用gdb -tui 开关来实现出色的“文本用户界面”(一种文本模式下的 gui)。它支持多个窗口,通常比使用“列表”命令更友好(因为它在 sep 窗口中显示源代码)

            【讨论】:

            • 也就是说,当我不在 emacs 中使用 gdb 时,我使用 tui 模式(这是我通常做的:)
            【解决方案10】:

            使用 gdb 的初学者会觉得这很困难。但是有与 gdb 相同的基于 GUI 的工具 DDD(数据显示调试器)。你在底部有一个控制台来运行 gdb 命令,顶部 3/4 部分将是代码。您可以选择学习和理解命令和流程

            【讨论】:

              猜你喜欢
              • 2023-03-10
              • 1970-01-01
              • 2011-06-09
              • 2021-11-02
              • 2017-01-30
              • 2019-09-30
              • 1970-01-01
              • 1970-01-01
              • 2011-11-02
              相关资源
              最近更新 更多