|
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")
# «.gud-next-anonymous» (to "gud-next-anonymous")
# (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 "")
# (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" "-gdwarf-4")
# (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")
# (find-efile "progmodes/gud.el")
# (find-efile "progmodes/gdb-mi.el")
# (find-efile "progmodes/" "gdb-mi.el")
# (find-gdbnode "Emacs")
# (find-enode "Debuggers")
# (find-enode "Commands of GUD")
# (find-efunction 'gdb)
# (find-efunction 'gdb "(gud-def gud-print")
# (find-efunction 'gud-def)
# (find-evariable-links 'gud-global-map)
# (find-ekeymapdescr gud-global-map)
#####
#
# realgud
# 2019sep20
#
#####
# «realgud» (to ".realgud")
# https://github.com/realgud/realgud
# https://github.com/realgud/realgud/wiki/Debuggers-Available
# https://github.com/realgud/realgud/wiki
#####
#
# gud-next is an anonymous lambda in Emacs31 (and this is bad)
# 2025sep13
#
#####
# «gud-next-anonymous» (to ".gud-next-anonymous")
# (find-es "emacs" "anonymous-lambda")
# (find-efunction 'gdb)
# (find-efunction-links 'gud-next)
# (find-elocus-links "C-x C-a C-n" 'global-map "gud-next")
# (find-egrep "grep --color=auto -nH --null -e gud-next progmodes/*.el")
* (eepitch-b-set-source)
* (defun b () (interactive) (eepitch-b-set-target))
* (gdb "gdb -i=mi")
# (find-clprin1 (ee-symbol-function 'gud-next))
# (cl-type (ee-symbol-function 'gud-next))
# (find-angg "ORG/2025-modern.org")
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: