gdb命令

信息显示
显示gdb版本信息               show version
显示gdb版权信息               show copying或show warranty
启动时不提示信息               gdb -q
退出时不提示信息               set confirm off
屏幕输出信息不分页             set pagination off或set height 0

函数
列出函数的名字                info functions
进入函数(有调试信息)          step 缩写s
不进入函数                    next 缩写n
进入没有调试信息的函数          set step-mode on
退出正在调试的函数             finish(函数执行完)| return(直接返回,不执行函数剩下的语句)
执行函数                     call func() | print func()
显示函数栈桢信息               info frame
显示尾栈桢信息                 set debug entry-values 1 (非0的值)
选择函数栈桢                  frame n(n为层数)| frame addr
向上向下切换栈桢               up n | down n
查看函数func汇编代码           disassemble func

断点
对namespace Foo中的foo函数设置断点     b Foo::foo
对匿名空间bar函数设置断点               b (anonymous namespace)::bar
在程序地址上设置断点                   b *address(b *0x400522)
获取程序入口地址Entry point           readelf | gdb info files
在文件的某一行设置断点                  b file:linenum(b file.c:6)
保存设置的断点和加载断点                save breakpoints savefilename | source savefilename
设置临时断点(只中断一次就删除掉)        tbreak 缩写tb
设置条件断点                          break xxx if cond
忽略断点                             ignore bnum count (bnum 断点编号,count 忽略count次中断)
显示断点                             info breakpoints 缩写i b

观察点
设置观察点                   watch a (当a发生变化都会被中断)缩写wa a
查看观察点                   info watchpoints
在特定线程观察点才生效         watch a thread threadid
设置读取观察点               rwatch a缩写rw a (访问a都会中断,只支持硬件观察点)
设置读写观察点               awatch a缩写aw a (读取或改变a都会中断,只支持硬件观察点)

catchpoint
只触发一次catchpoint           tcatch a
系统调用设置catchpoint          catch syscall mmap函数 |系统调用编号参考/usr/local/share/gdb/syscalls文件夹下的amd64-linux.xml

打印
打印ascii和宽字节字符串          x/s str | p sizeof(wchar_t) 4字节:x/ws str 2字节就用x/hs str
打印大数组内容                  set print elements 0
打印数组连续元素                 print array[index]@num index数组索引从0开始计数,num多少个连续元素
打印数组索引下标                 set print array-indexes on
打印调用栈信息                   backtrace缩写bt
打印函数局部变量                 bt full | info locals
打印变量类型信息                 ptype xxx
打印内存的值                    x/nfu addr 以f格式打印从addr开始的n个长度单元为u的内存值
                              n:输出单元的个数
                              f输出格式:x是16进制输出,u是10进制,o是8进制,t是2进制,
                              u单元:b是byte,h是2个byte,w是4个byte(word),g是8个byte
打印源代码行                     list缩写l list 行号或函数
使用$_和$__变量                  x命令会把内存地址存放到$_,把地址中的内容存放到$__

多进程和线程
调试已运行的进程                  gdb -p pid | gdb attach pid ,用detach 脱离进程
调试子进程                       set follow-fork-mode child
查看线程信息                     info threads

core dump文件
生成core dump文件               generate-core-file | gcore

汇编
汇编格式设置intel格式             set disassembly-flavor intel
显示将要执行的汇编指令             display /i $pc | display /3i $pc显示多条指令
打印寄存器的值                    info registers | info all-registers
显示机器码                       disassemble /r xxxx

改变字符串的值                    set var1 = "xxx"
set {type}address=expr”的方式,含义是给存储地址在address,变量类型为type的变量赋值
set {int}0x8047a54 = 8
修改pc寄存器的值                  set var $pc=0x08050949

显示动态链接库                    info sharedlibrary

gdb init文件 .gdbinit
# 保存历史命令
set history filename ~/.gdb_history
set history save on

在gdb中运行shell命令 shell ls

set logging on        //开启文件日志
set logging file debug.txt   //设置保存文件名

//执行脚本
1.gdb -x init.gdb
2.source -v file

//设置动态库搜索路径(符号表)
set sysroot
set solib-absolute-prefix
set solib-search-path //可设置多个搜索路径,路径之间使用“:”隔开(在linux中为冒号,DOS和Win32中为分号)


16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int:  2个字节
unsigned int : 2个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节

32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int:  4个字节
unsigned int : 4个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节

64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int:  4个字节
unsigned int : 4个字节
float:  4个字节
double:   8个字节
long:   8个字节
long long:  8个字节
unsigned long:  8个字节

 

 

转载于:https://my.oschina.net/hudangwei/blog/659146

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值