Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
####### # # E-scripts on gdb. # # Note 1: use the eev command (defined in eev.el) and the # ee alias (in my .zshrc) to execute parts of this file. # Executing this file as a whole makes no sense. # An introduction to eev can be found here: # # (find-eev-quick-intro) # http://angg.twu.net/eev-intros/find-eev-quick-intro.html # # Note 2: be VERY careful and make sure you understand what # you're doing. # # Note 3: If you use a shell other than zsh things like |& # and the for loops may not work. # # Note 4: I always run as root. # # Note 5: some parts are too old and don't work anymore. Some # never worked. # # Note 6: the definitions for the find-xxxfile commands are on my # .emacs. # # Note 7: if you see a strange command check my .zshrc -- it may # be defined there as a function or an alias. # # Note 8: the sections without dates are always older than the # sections with dates. # # This file is at <http://angg.twu.net/e/gdb.e> # or at <http://angg.twu.net/e/gdb.e.html>. # See also <http://angg.twu.net/emacs.html>, # <http://angg.twu.net/.emacs[.html]>, # <http://angg.twu.net/.zshrc[.html]>, # <http://angg.twu.net/escripts.html>, # and <http://angg.twu.net/>. # ####### # Note: there are some more interesting (and recent) things at: # (find-es "anatocc") # Other stuff: # «.invoking_gdbk» (to "invoking_gdbk") # «.zcatinfo-gdb» (to "zcatinfo-gdb") # «.gdb-source» (to "gdb-source") # «.online-help» (to "online-help") # «.gdb-6.5-on-sarge» (to "gdb-6.5-on-sarge") # «.gdb-6.6-on-etch» (to "gdb-6.6-on-etch") # «.C-types» (to "C-types") # «.mailing-lists» (to "mailing-lists") # «.urdb» (to "urdb") # «.gdb-squeeze» (to "gdb-squeeze") # «.lua-gdb-helper» (to "lua-gdb-helper") # «.main-commands» (to "main-commands") # «.macros» (to "macros") # «.python» (to "python") # «.gud» (to "gud") # «.realgud» (to "realgud") # (find-zsh "installeddebs | sort | grep gdb") # (find-zsh "availabledebs | sort | grep gdb") # (find-status "gdb") # (find-vldifile "gdb.list") # (find-udfile "gdb/") # (find-status "gdb-doc") # (find-vldifile "gdb-doc.list") # (find-udfile "gdb-doc/") # (find-node "(gdb)") # (find-node "(gcc)") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) apti gdb gdb-doc ##### # # invoking gdb (links to e-scripts that use gdb in interesting ways) # 2001jan21 # ##### # «invoking_gdbk» (to ".invoking_gdbk") # (find-es "anatocc" "dlopen") # (find-es "mktclapp" "debugging_.sos") # (find-es "expect") # (find-es "tcl" "8.3-src") #* # The most powerful -- and less trivial -- way to call invoke gdb/gdbk # on a running program is this one: the program runs normally on a # terminal, and when M-g is pressed a lurking Expect makes Emacs # attach a gdb on it. # (find-es "lynx" "debug_lynx") expect -c ' spawn /usr/src/lynx-2.8.3/lynx set pid [exp_pid] interact "\033p" {send_user "\n$pid\n"} \ "\033g" { set gdbkstr "/usr/src/lynx-2.8.3/lynx $pid" set lispcode "(gdbk-gdb nil \"$gdbkstr\")" catch {exec gnudoit $lispcode} } ' #* GNUCLIENT=no expect -c ' spawn [set f /usr/src/emacs-21.0.93/src/emacs] -nw $env(HOME)/CRIM/014ideas interact "\033g" {catch {exec gnudoit "(gdbk-gdb nil \"$f [exp_pid]\")"}} ' #* ##### # # gdb and eev # 2000jan10 # ##### # (find-angg "eev-extras.el" "gdbk-mode") # (find-es "anatocc" "dlopen") # (find-es "mktclapp" "debugging_.sos") # (find-fline "~/.gdbinit") # (find-fline "~/GDB/") ##### # # searching the gdb info docs # 2000sep09 # ##### # «zcatinfo-gdb» (to ".zcatinfo-gdb") # (find-status "gdb") # (find-vldifile "gdb.list") # (find-fline "/usr/doc/gdb/") # (find-angg ".zshrc" "zcatinfo") #* zcatinfo /usr/info/gdb > /tmp/gdb.info grep -i 'virtual function' /tmp/gdb.info #* # (find-fline "/tmp/gdb.info") ##### # # gdb internals # ##### # (find-node "(gdbint)Top" "Partial Symbol Tables") # (find-fline "/usr/doc/binutils/bfd/") # (find-node "(gprof)Compiling") # (find-node "(gcc)Option Summary" "-pg") # (find-node "(gcc)Debugging Options" "-pg") # (find-node "(gcc)Debugging Options" "-a") # (find-node "(gdb)Backtrace") ##### # # gdb source (potato) # 2001jan21 # ##### # «gdb-source» (to ".gdb-source") # (find-es "expect" "dejagnu") #* pdsc $SDEBIAN/dists/potato/main/source/devel/gdb_4.18.19990928-1.dsc cd /usr/src/gdb-4.18.19990928/ debian/rules config |& tee odrc #* cd /usr/src/gdb-4.18.19990928/gdb/testsuite/ make check |& tee omc #* # (find-gdbfile "") # (find-gdbfile "debian/") # (find-gdbtsfile "") # (find-gdbtsfile "Makefile") # (find-gdbtsfile "Makefile" "$(RUNTEST) $(RUNTESTFLAGS)") # (find-gdbtsfile "gdb.base/") # (find-gdbtsfile "gdb.base/echo.exp") # (find-gdbtsfile "omc") # (find-gdbtsfile "gdb.log") # (find-node "(dejagnu)Invoking runtest") # (find-gdbfile "opcodes/dis-buf.c") # (find-gdbfile "opcodes/disassemble.c") # (find-gdbfile "opcodes/i386-dis.c") # (find-gdbfile "bfd/bfd-in2.h") # (find-gdbfile "bfd/bfd.c" "dynamic_reloc") # (find-gdbfile "bfd/elf-bfd.h") # (find-gdbfile "bfd/elf.c" "Dynamic linking") # (find-gdbfile "bfd/elf32-i386.c") # (find-gdbfile "bfd/elflink.h") # (find-gdbfile "bfd/bfd.c" "<<typedef bfd>>") # (find-gdbfile "bfd/doc/") apti binutils-dev # (find-vldifile "binutils-dev.list") # (find-fline "/usr/doc/binutils-dev/") # (find-node "(bfd)Top") # (find-node "(bfd)How It Works" "To use the library,") # (find-node "(gdbint)Top") # (find-node "(gdb)Auto Display") # (find-node "(gdb)Set Breaks") # (find-node "(gdb)Files" "`info share'") # (find-node "(gdb)Working Directory") # (find-node "(gdb)Mode Options" "`-tty DEVICE'") ##### # # online help in gdb # 2006jul06 # ##### # «online-help» (to ".online-help") # (find-node "(gdb)Help") # (find-node "(gdb)Mode Options" "`-batch'") # (find-node "(zsh)Process Substitution" "If =(...) is used") # (find-zsh "gdb -batch -x =(echo 'help breakpoints')") # (find-zsh "gdb -batch -x =(echo 'help tbreak')") # (find-node "(gdb)Index") # (find-node "(gdb)Set Breaks" "`tbreak ARGS'") ##### # # gdb-6.5 on sarge # 2006jul07 # ##### # «gdb-6.5-on-sarge» (to ".gdb-6.5-on-sarge") # (find-status "gdb") # (find-vldifile "gdb.list") # (find-udfile "gdb/") # http://ftp.gnu.org/gnu/gdb/gdb-6.5.tar.gz # (code-c-d "gdb" "~/bigsrc/gdb-6.5/") # (find-gdbfile "") #* rm -Rv ~/bigsrc/gdb-6.5/ tar -C ~/bigsrc/ -xvzf $S/http/ftp.gnu.org/gnu/gdb/gdb-6.5.tar.gz cd ~/bigsrc/gdb-6.5/ ./configure |& tee oc make |& tee om #* # (find-gdbfile "gdb/" " gdb") # (find-gdbfile "") Pergunta: serĂ¡ que esse gdb se liga com o libdbthreads nova ou com a default? Acho que ela nao e' mais uma lib separada. Why: (find-es "ruby" "ruby-postgres-gdb" "info share") ##### # # gdb-6.6 # 2007jul04 # ##### # «gdb-6.6-on-etch» (to ".gdb-6.6-on-etch") # This is from unstable, recompiled on stable=etch. # Rici's ldb requires a gdb that recognize that "command"s start blocks. # The patch that fixes that only went into the trunk in gdb-6.6. # (find-ldbfile "apicheck/ldb.gdb") # http://ftp.debian.org/debian/pool/main/g/gdb/ # http://ftp.debian.org/debian/pool/main/g/gdb/gdb_6.6.dfsg-1.dsc # http://ftp.debian.org/debian/pool/main/g/gdb/gdb_6.6.dfsg-1.diff.gz # http://ftp.debian.org/debian/pool/main/g/gdb/gdb_6.6.dfsg.orig.tar.gz #* rm -Rv ~/bigsrc/gdb/ mkdir ~/bigsrc/gdb/ cd $S/http/ftp.debian.org/debian/pool/main/g/gdb/ cp -v gdb_6.6.dfsg* ~/bigsrc/gdb/ cd ~/bigsrc/gdb/ dpkg-source -sn -x gdb_6.6.dfsg-1.dsc cd ~/bigsrc/gdb/gdb-6.6.dfsg/ dpkg-buildpackage -us -uc -b -rfakeroot |& tee odb #* # (code-c-d "gdb66" "~/bigsrc/gdb/gdb-6.6.dfsg/") # (find-gdb66file "") # (find-gdb66file "gdb/") # (find-gdb66file "gdb/c-exp.y" "int (foo::bar::baz::bizzle::*)") # (find-gdb66file "gdb/c-typeprint.c") # (find-gdb66file "gdb/c-valprint.c") ##### # # C types # 2007aug02 # ##### # «C-types» (to ".C-types") # (find-node "(gdb)Symbols" "`ptype [ARG]'") # (find-node "(gdb)Expressions") # More notes at: # (find-es "davinci" "peek.lua:doc") # I often use GDB to inspect C types - expanding #defines mentally on # the source files as I read them is clumsy sometimes, and using "gcc # -E" too - but my notes about that, and about e-scripting GDB, are # scattered around at several other e-script files... ##### # # mailing lists # 2007aug18 # ##### # «mailing-lists» (to ".mailing-lists") # http://lists.gnu.org/archive/html/bug-gdb/ # http://lists.gnu.org/archive/html/gdb/ # http://lists.gnu.org/archive/html/ ##### # # urdb (for reversible debugging) # 2009oct28 # ##### # «urdb» (to ".urdb") # (find-es "hol" "dmtcp") # http://urdb.sourceforge.net/ # http://arxiv.org/abs/0910.5046v1 # (find-node "(gdb)Reverse Execution") ##### # # gdb on squeeze # 2011nov20 # ##### # «gdb-squeeze» (to ".gdb-squeeze") # (find-es "emacs" "gdb-mi") # (find-angg ".emacs" "gdb") # (find-status "gdb") # (find-vldifile "gdb.list") # (find-udfile "gdb/") # (find-status "gdb-doc") # (find-vldifile "gdb-doc.list") # (find-udfile "gdb-doc/") # (find-fline "/etc/gdb/gdbinit") # To do: fix the way "find-node"-links are htmlized by blogme3... # (find-blogme3 "angglisp.lua" "find_node") # http://www.gnu.org/software/gdb/ # (find-node "(gdb)Top") # (find-node "(gdb)TUI") # (find-node "(gdb)GDB/MI") # http://sourceware.org/gdb/download/onlinedocs/gdb/index.html # http://sourceware.org/gdb/download/onlinedocs/gdb/TUI.html # http://sourceware.org/gdb/download/onlinedocs/gdb/GDB_002fMI.html <edrx> hello - if I understand correctly, if I run gdb with "-i=mi" in Emacs <edrx> then gdb takes care to distinguish outputs from GDB itself, e.g., the outputs of "print"s and "ptype"s issued on the command line <edrx> from outputs from the program being run... <edrx> but that makes things harder to use from my default (and highly non-standard) way of scripting GDB, which is through scripts in a separate buffer, like what is shown here: <edrx> http://angg.twu.net/eev-videos/video4-eepitch.mp4 <edrx> so - question: <edrx> 1) is there a way to make the GDB output and the program output both be treated as "GDB interaction", and thus appear in the GDB interaction buffer? <edrx> (oops, I forgot something: a way compatible with -i=mi) <edrx> 2) I'd like to learn more about the -i=mi protocol... any starting points you'd recommend <edrx> ? <edrx> thanks! =) # (find-node "(gdb)List") ##### # # lua-gdb-helper # 2013jan09 # ##### # «lua-gdb-helper» (to ".lua-gdb-helper") # (find-es "lua5" "lua-datatypes-gdb") # https://github.com/mkottman/lua-gdb-helper # https://github.com/mkottman/lua-gdb-helper/blob/master/luagdb.txt ##### # # GDB's main commands # 2013jan09 # ##### # «main-commands» (to ".main-commands") # (find-es "lua5" "lua-datatypes-gdb") # (find-gdbnode "Index") # (find-gdbnode "Data" "`print EXPR'") # (find-gdbnode "Symbols" "`ptype [ARG]'") # (find-gdbnode "Symbols" "`whatis [ARG]'") # (find-gdbnode "List" "`list'") # (find-gdbnode "Machine Code" "`info line LINESPEC'") # (find-gdbnode "Continuing and Stepping" "`next [COUNT]'") # (find-gdbnode "Continuing and Stepping" "`step'") # (find-gdbnode "Continuing and Stepping" "`step COUNT'") # (find-gdbnode "Continuing and Stepping" "`until'") # (find-gdbnode "Macros") # (find-gdbnode "Auto Display") # (find-gdbnode "Convenience Vars") # (find-gdbnode "Frames") # (find-gdbnode "Backtrace") http://sourceware.org/gdb/download/onlinedocs/gdb/Machine-Code.html http://sourceware.org/gdb/download/onlinedocs/gdb/Specify-Location.html ##### # # Support for C macros # 2013jan11 # ##### # «macros» (to ".macros") # (find-gdbnode "Macros") # (find-gdbnode "Compilation" "`-gdwarf-2'" "`-g3'") # (find-gccnode "Debugging Options" "`-gdwarf-2'") # (find-gccnode "Debugging Options" "`-g3'") # (find-gdbnode "Macros" "#define M 42") # http://stackoverflow.com/questions/10496195/gdb-macro-symbols-not-present-even-when-using-g3-or-ggdb3-or-gdwarf-4 ##### # # Scripting GDB using Python # 2013jan09 # ##### # «python» (to ".python") # (find-gdbnode "Python") ##### # # gud # 2019sep20 # ##### # «gud» (to ".gud") ##### # # realgud # 2019sep20 # ##### # «realgud» (to ".realgud") # https://github.com/realgud/realgud # https://github.com/realgud/realgud/wiki/Debuggers-Available # https://github.com/realgud/realgud/wiki https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-08/msg00922.html (gdb) source /path/to/emacs/src/.gdbinit (gdb) frame 3 (gdb) print window (gdb) xwindow (gdb) print XWINDOW(window)->contents (gdb) xbuffer (gdb) print selected_window (gdb) xwindow (gdb) print XWINDOW(selected_window)->contents (gdb) xbuffer # (find-zsh "availabledebs | sort | grep gdb") # A thread on the error # "Failed to read a valid object file image from memory": # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=401482 # (find-node "(tramp)Remote processes" "Running a debugger on a remote host") # On the new interface for GUD, the one with 5 windows: # http://users.snap.net.nz/~nickrob/ https://github.com/cyrus-and/gdb-dashboard https://stackoverflow.com/search?q=user:1442050+[gdb] https://news.ycombinator.com/item?id=30737509 Debugging with GDB (sourceware.org) - rr *** https://lists.gnu.org/archive/html/emacs-devel/2023-03/msg01059.html Re: Debugging M-x gdb # (find-fline "~/LOGS/2024dec12.emacs" "gdb -i=mi /tmp/golem/test_array_access") # Local Variables: # coding: utf-8-unix # End: