gdb一图够
2022-02-28 14:04:13   0  举报             
     
         
 AI智能生成
  gdb最重要的指令用法总结。
    作者其他创作
 大纲/内容
  断点    
     匿名空间断点    
     break(b) (anonymous namespace)::func  
     指令地址断点    
     b *0x400522  
     文件行号断点    
     b file:N  
     断点配置保存/加载文件    
     save breakpoints file-name-to-save  
     source file-name-to-save  
     一次性断点    
     tbreak(tb)  
     条件断点    
     b XXX if i==101  
     忽略x号断点N次    
     ignore x N  
     观察点    
     设置观察点    
     watch(wa) a  
     watch *(data type*)address  
     查看观察点    
     info watchpoints  
     针对某线程的观察点    
     i thread 找到线程序号,如2  
     wa a thread 2  
     读观察点    
     rwatch(rw) a:a被读时断点  
     awatch(aw) a:a被读写都会断点  
     catchpoint事件跟踪    
     catch evt:当事件evt发生的时候,程序停止运行    
     exec/fork/vfork: 被调用  
     动态库    
     load: 加载动态库  
     load libname: 加载名为libname的动态库  
     unload: 卸载动态库  
     unload libname: 卸载名为libname的动态库  
     异常    
     throw: C++异常  
     catch: C++捕捉到异常  
     系统调用被调用    
     syscall [args]: 调用系统调用,args可以指定系统调用号,或者名称  
     一次性catchpoint    
     tcatch evt  
     函数    
     列出函数名    
     info functions: 所有函数  
     info functions reg*: 符合正则的函数  
     进入函数    
     step(s), 进入带调试信息的函数  
     set step-mode on; s: 进入不带调试信息的函数,如printf  
     退出函数    
     finish: 运行到函数结束  
     return exp: 直接return某个value,剩余代码不会被执行  
     手工执行函数    
     call  
     print  
     栈帧信息    
     info(i) frame:栈基地址等  
     disassemble(disas) func:汇编代码  
     寄存器    
     i registers eax  
     i registers: 所有寄存器  
     p $eax  
     选择栈帧    
     bt; frame(f) N:从bt看栈帧层次号,直接选择  
     f addr:直接跳到指定地址的栈帧  
     向上/下切换栈帧    
     up N  
     down N  
     打印    
     数组中连续元素    
     p array[60]@10:array 数组第60~69个元素的值  
     局部变量    
     bt full [n]:各个函数的局部变量, 若有n则打印到n层为止  
     i locals:当前函数的局部变量  
     进程内存映射信息(内存段起止地址)    
     i proc mappings  
     i files  
     静态变量    
     p 'static-1.c'::var:指定文件中的静态变量  
     变量类型    
     whatis a  
     ptype a  
     内存值    
     打印: x/nfu addr    
     n:输出单元的个数  
     f:是输出格式    
     x: 16进制  
     o: 8进制  
     u: 无符号10进制  
     d: 10进制  
     t: 2进制  
     c: 字符  
     s: 字符串  
     u:标明一个单元的长度    
     b: 1byte  
     h: 2byte  
     w: 4byte  
     g: 8byte  
     搜索: find    
     find[/un] start_addr, +len, val1 [, val2, …]    
     find &mixed, +sizeof(mixed), (char) 'c', (short) 0x1234, (int) 0x87654321  
     find[/un] start_addr, end_addr, val1 [, val2, …]    
     find 0x804c000, 0x806d000, "hellogdb"  
     派生类型对象    
     set print object on  
     代码和汇编指令关联    
     disas /m fun  
     查看某一行代码的汇编指令    
     i line 13:得到指令的起止地址  
     disas [start], [End]  
     共享链接库信息    
     i sharedlibrary [reg*]  
     源码路径设置    
     directory(dir) PATH  
     set substitute-path /home/old /home/new  修改目录路径  
     改变程序执行    
     修改变量值    
     set main::p1="Jil"  修改字符串  
     set var i = 8  修改变量i  
     set {int}0x8047a54 = 8  通过地址修改  
     set var $eax = 8  修改寄存器值,eax存储返回值  
     修改执行顺序    
     set var $pc=0x08050949  直接修改PC寄存器指定下一条指令  
     jump(j)  15  跳转到第15行  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
  
  
  
  
  
  
  
  
  
  
 