https://sourceware.org/gdb/documentation/
Type info variables
to list "All global and static variable names".
Type info locals
to list "Local variables of current stack frame" (names and values), including static variables in that function.
Type info args
to list "Arguments of the current stack frame" (names and values).
把值打印出来
(gdb) p *(item.second._M_dataplus._M_p)
$50 = 3 ‘\003‘
> p <var>.DebugString() # 使用DebugString()将proto对象内部结构打印出来
# n:为正整数,表示需要打印的内存单元个数 # # f:打印格式, 如下 # - x: 十六进制 # - d: 十进制 # - u: 十六进制 # - o: 八进制 # - t: 二进制 # - a: 十六进制 # - c: 字符格式 # - f: 浮点数 # # u: 内存单元大小,如下: # - b: 单字节 # - h: 双字节 # - w: 四字节 # - g: 八字节 # > x/<n/f/u> <addr> # addr: 要打印的内存地址
gdb会限制打印字符串的最大长度。使用下列命令可修改限制。
> show print elements # 显示字符串最大打印长度 > set print elements 0 # 取消字符串最大打印长度,可以打印长string的全部内容
pstack <pid> # 可事先dump某个进程下所有线程的thread id和backtrace,方便gdb调试 > info threads # 查看当前所有线程信息 > bt # 查看当前线程的backtrace > bt full # 查看当前线程更详细的backtrace(每个栈帧上的参数) > thread <thread-id> # 切换到某一个线程 > set scheduler-locking on # 多线程环境下,只有当前被调试线程会执行 > set scheduler-locking off # 多线程环境下,除当前被调试线程之外的其他线程也在同步执行 > set scheduler-locking step # 多线程环境下,对当前被调试线程用step调试时,其他线程不会执行;使用next调试时,其他线程也许会执行
> r arg1 arg2 ... # 重新开始运行二进制,如果需要传入参数内需要arg1 arg2... > stop # 暂停运行 > c # 继续执行(continue) > n # 单步执行(next),遇到函数则跳过 > s # 单步执行(step),遇到函数则跳入函数体 > finish # 运行直到跳出当前函数 > until line # 运行直到到达指定行 > call command # 运行C++命令 > shell # 进入shell模式,回到linux终端 > exit # 退出shell模式,回到gdb命令行 > set $var=XXX # 设置gdb变量 > set var=XXX # 设置程序中变量
starti 从第一条指令开始执行程序
layout asm 查看汇编
info register 查看寄存器
//查看当前运行的进程 ps aux|grep a.out
//查看当前运行的轻量级进程 ps -aL|grep a.out
//查看主线程和新线程的关系 pstree -p 主线程id
//查看栈结构 pstack 线程ID
gdb线程
//1.查看进程:info inferiors
//2.查看线程:info threads
//3.查看线程栈结构:bt
//4.切换线程:thread n(n代表第几个线程)
只运行当前线程
1. 设置:set scheduler-locking on
2. 运行:n

所有线程并发执行
1. 设置:set scheduler-locking off
2. 运行:n
原文:https://www.cnblogs.com/demian/p/14461459.html