gdb 默认追踪父进程运行 子进程独立运行
i inferior 查看进程状态
inferior 2 切换到进程2
set follow-fork-mode child 调试子进程
set detach-on-fork off 同时调试父子进程 另一个进程挂起
set schedule-multiple on 父子进程同时开启
set scheduler-locking on 让其他线程暂停执行
add-inferior [ -copies n ] [ -exec executable ] 命令加载可执行文件 b
add-inferior -copies 2 -exec b
跳转执行 jump 语句的运行点。可以是文件的行号,可以是file:line格式,可以是+num
clone-inferior -copies 1
产生信号量 signal singal
maint info program-spaces 打印被调试的进程信息
return (x) 强制返回
强制调用函数 call expr
break frik.c:13 thread 28 if bartab > lim 调试多线程
set detach-on-fork mode: 用于告诉GDB在fork()之后是否分离其中的一个进程,或者同时保持对他们的控制
tb 只断一次
ignore bnum count 忽略接下来几次断点
save breakpoints FILE source FILE
程序地址打断点 b *0x400522
b (anonymous namespace)::bar 匿名空间断点
frame 2 up down 利用栈帧调试
catch syscall [name | number] 为关注的系统调用
awatch ”命令设置读写观察点
wa a thread 2
return expression ”命令指定函数的返回值
watch expr: 设置写watchpoint,当应用程序写expr, 修改其值时,程序停止运行
rwatch expr: 设置读watchpoint,当应用程序读表达式expr时,程序停止运行
awatch expr: 设置读写watchpoint, 当应用程序读或者写表达式expr时,程序都会停止运行
p 'static-1.c'::var
ptype he 详细的类型信息
gdb中使用“ x ”命令来打印内存的值,格式为“ x/nfu addr ”。含义为以 f 格式打印从 addr 开始
n:输出单元的个数。
f:是输出格式。比如 x 是以16进制形式输出, o 是以8进制形式输出,等等。
u:标明一个单元的长度。 b 是一个 byte , h 是两个 byte (halfword), w 是四 个 byte (word), g 是八个 byte (giant word)
缺省情况下程序的输入输出是和gdb使用同一个终端。你也可以为程序指定一个单独的输入 输出终端。 tty /dev/pts/2
generate-core-file”命令来产生core dump文件
跳转到指定位置执行 j line
使用" info sharedlibrary regex "命令可以显示程序加载的共享链接库信息
“handle signal print/noprint ”命令设置当信号发生时,是否打印
保存历史命令
set history filename ~/.gdb_history
set history save on
退出时不显示提示信息
set confirm off
按照派生类型打印对象 set print object on
打印数组的索引下标 set print array-indexes on
每行打印一个结构体成员 set print pretty on
如果想在gdb中查看宏信息,可以使用 gcc -g3 进行编译:
u -> until
j -> jump
set env LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0
“ set logging on ”命令把执行gdb的过程记录下来
(gdb) set logging file log.txt (gdb) set logging on
在GCC编译程序的时候,加上-ggdb3参数
gdb中也可以有变量吗?就像shell一样,gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:
(gdb) set $i = 0
(gdb) p a[$i++]
readelf 获得入口地址
tracepoint gdbserver
远程:
gbdserver :0 ScenesServer/ScenesServer
gdb -q ScenesServer/ScenesServer
target remote :44693
gdb查看容器内容
p ((unsigned long)(&((ClassName*)0)->MemberName)),即可打印出类
ClassName 的成员变量 MemberName 相对类基地址的偏移,根据偏移从小