【问题标题】:How to get GDB to do a 'list' after every step?如何让 GDB 在每一步之后都做一个“列表”?
【发布时间】:2011-05-20 17:46:11
【问题描述】:

我可以使用 gdb,但是每次我想查看我在源代码中的位置时,我都必须给出“list”命令。

(gdb) next
351     int right = get_variable(right_token, right_id);
(gdb) list
346         op = "<>";
347         right_id = parse_id_or_crash();
348     }
349     Token * right_token = tokens[parser_index - 1];
350     int left = get_variable(left_token, left_id);
351     int right = get_variable(right_token, right_id);
352     if (op == "<")
353         return left < right;
354     if (op == ">")
355         return left > right;

如果 gdb 能在每一步之后自动列出源代码,那就太好了。如果 gdb 可以指示我在源代码中的位置(例如使用“->”或其他东西),那也很棒。一次只看到一行代码让我有点幽闭恐惧症。

【问题讨论】:

    标签: gdb


    【解决方案1】:

    使用gdb TUI模式http://sourceware.org/gdb/onlinedocs/gdb/TUI-Overview.html#TUI-Overview 您可以通过 C-x A 键绑定进入或退出 TUI 模式。

    【讨论】:

      【解决方案2】:

      hook-stop

      define hook-stop
        l
      end
      

      文档:https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html

      此外,还有一个伪命令“stop”。定义 (‘hook-stop’) 使相关命令在程序中每次执行停止时执行:在运行断点命令之前,打印显示或打印堆栈帧。

      学习自:https://stackoverflow.com/a/8374474/895245

      突出显示当前行

      这是唯一完全取代 buggy -tui 模式的东西。

      目前没有 Python 脚本是不可能的:https://sourceware.org/bugzilla/show_bug.cgi?id=21044

      使用 Python 脚本,我目前正在使用:https://github.com/cyrus-and/gdb-dashboard

      另见:How to highlight and color gdb output during interactive debugging?

      【讨论】:

        【解决方案3】:

        您可以为此使用 GDB 宏:

        (gdb) def n
        Type commands for definition of "n".
        End with a line saying just "end".
        >next
        >list
        >end
        

        如果您想要一个指向当前行的箭头,您可以考虑使用 GDB 前端(例如 Emacs 中的 M-x gdb)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多