How to get GDB to do a 'list' after every step?
I can step along with gdb, but I have to give the "list" command every time I want to see where I am in source code.
(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 开发者_如何学C if (op == ">")
355 return left > right;
It would be great if gdb would automatically list the source code after every step. It would also be great if gdb could indicate where in the source code I am (like with a "->" or something). Seeing only one line of code at a time makes me a little claustrophobic.
Use gdb TUI mode http://sourceware.org/gdb/onlinedocs/gdb/TUI-Overview.html#TUI-Overview You can enter or leave the TUI mode with C-x A key binding.
hook-stop
define hook-stop
l
end
Doc: https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html
In addition, a pseudo-command, ‘stop’ exists. Defining (‘hook-stop’) makes the associated commands execute every time execution stops in your program: before breakpoint commands are run, displays are printed, or the stack frame is printed.
Learned from: https://stackoverflow.com/a/8374474/895245
Highlight the current line
This is the only thing missing to completely replace the buggy -tui
mode completely.
It is currently not possible without Python scripting: https://sourceware.org/bugzilla/show_bug.cgi?id=21044
With Python scripting, I'm currently using: https://github.com/cyrus-and/gdb-dashboard
See also: How to highlight and color gdb output during interactive debugging?
You can use a GDB macro for this:
(gdb) def n
Type commands for definition of "n".
End with a line saying just "end".
>next
>list
>end
If you want an arrow pointing at the current line, you might consider using a GDB front-end instead (e.g. M-x gdb
in Emacs).
精彩评论