Skip to content

tromey/gdb-helpers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

This adds some new commands and convenience functions to gdb. It also changes some defaults to be more sensible. I've found this useful while hacking on firefox.

Also, for Emacs users, this arranges to set EDITOR to emacsclient -n when gdb is running inside Emacs, so that the edit command will contact Emacs and not wait for the edit to be complete. (In this case it also sets another environment variable so the new ecomm command will do the right thing.)

Installing

The simplest way is to:

make hack-gdbinit

This will edit your .gdbinit to load the helpers.

New commands:

  • ecomm N. Edit the commands for breakpoint N. This writes the commands out to a file and pops up your editor. When you're done the commands are re-applied.

  • hier CLASS. Print the class hierarchy of a class, one line per base class.

  • preattach FILE. This is like attach, but it attaches to the next instance of the program. This relies on SystemTap to do its magic.

New functions

  • $_python(STR). Evaluate STR as a Python expression. This is an occasionally handy shortcut to use in place of a new gdb.Function implementation.

  • $_typeof(EXP). Evaluates EXP and then returns a string representation of its dynamic type. This is handy in conjunction with $_regex (distributed with gdb) in breakpoint conditions -- you can easily break only when a specific sub-class is seen.

  • $_upvar(NAME, LIMIT). Search up for at most LIMIT frames, looking for a variable named NAME (which must be a string). If such a variable is found, return its value. Otherwise, an error results.

  • $_up([N = 1]). Move up N frames and return 1. This is sometimes useful in conjunction with $_var.

  • $_var(NAME). Return the value of a variable named NAME in the current frame.

Oddball Features:

  • If you put \E into your extended-prompt, then when running gdb in the shell, changes to the current location will be sent to a running Emacs using emacsclient. For best results you will also want to (setq server-raise-frame nil) in Emacs.

    This is useful if you have to run gdb from the shell for some reason, and want see the sources, and don't want to use the TUI, and gdb-gui fails due to an obscure bug on your machine. Cough cough.

About

GDB helper scripts

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published