gdb常用指令:start开始调试,在第1行代码中停止,(gdb ) start
info br表示当前存在断点
clear clear 750会删除750行中的所有断点
查看l list的缩写源代码,(gdb ) l [number/function]
b用b b: Breakpoint的简写设置断点。 (gdb ) b 10
b用b b: Breakpoint的简写设置断点。 (gdb ) b main
在bfilename : [ line/function ] b :文件filename行或函数中设置断点
x/10i $pc
i breakpoints i:info的缩写。 (gdb ) i breakpoints
d [ bpno ]删除d : delete breakpoint的缩写、指定编号的断点之一或删除所有断点。 断点号从1开始递增。 (gdb ) d 1
s s: step执行一行源代码,该行代码中如果有函数调用,则进入该函数; (gdb ) s
n n: next执行源代码行,同时执行此行中的函数调用。 (gdb ) n
r运行run的缩写、调试的程序。 如果到目前为止没有断点,请运行完整的程序。 如果存在断点,程序将在第一个可用断点处暂停。 (gdb ) r
c Continue的缩写。 继续运行调试对象程序,直到下一个断点或程序结束。 (gdb ) c
退出finish函数
p [var] Print缩写显示指定变量(全局变量,如临时变量或int a )的值。 (gdb ) p a
display [var] display,设定想要跟踪的变量。 例如,int a )。 (gdb )显示a
undisplay [varnum] undisplay取消对变量的跟踪,跟踪的变量由整数标识。 (gdb ) undisplay 1
set args可以指定运行时参数。 (gdb ) set args 10 20
show args显示运行时参数。
help [cmd] GDB帮助命令提供了GDB中有名命令的说明。 (gdb )帮助
换行前的命令,重复(gdb )换行
例如,谷歌使用gdb调试的方法
首先编译可调试的二进制文件,然后在编译过程中添加-gcflags '-N -l '参数。 范例
CGO _ enabled=0GOOS=linuxgobuild-mod=vendor-a-ldflags‘- ext ldflags‘- static’- GC flags‘- n-l’./cmd
然后,用gdb调试生成的二进制文件
gdb /root/go/swagger
进入gdb后,如果需要添加参数才能运行二进制文件,则必须先运行set args参数名称,例如
setargsgenerateserver---template-dir=/tmp/harbor/tools/swagger/templates---exclude-main---- adddd
b shared.go:750
然后,运行run并开始运行程序
where
readelf-a显示test suite|$ tee elf.txt二进制文件的内容,并将其保存到elf.txt文件中
info threads显示当前可调试的所有线程,每个线程都有分配给GDB的ID,供以后处理线程时使用。 前面有*的是当前正在调试的线程。
thread ID将当前正在调试的线程切换为具有指定ID的线程。
break thread _ test.c :123 threadall在所有线程的相应行中设置断点