美文网首页linux深入
gdb常用调试命令

gdb常用调试命令

作者: 江河湖海洋 | 来源:发表于2022-10-18 15:35 被阅读0次

    gdb 程序名 :用gdb启动程序
    run argv[1] argv[2]: 调试时命令行传参
    set args argv[1] argv[2] :设置运行参数
    show args:查看运行参数

    gdb attach 程序pid : 用gdb调试正在运行的程序
    gdb -args 程序名 argv[1] argv[2] : 用gdb启动带参数的程序
    gdb 程序名 core文件:gdb调试core文件:

    set print elements 0 :gdb调试设置打印全部字符串长度
    show print elements
    until : gdb 结束当前循环
    r(run) :重新开始运行文件
    start : 单步执行,停在第一执行语句
    l(list): 查看源代码(list n,从第n行开始查看代码, list 函数名:查看具体函数名)
    set :设置变量的值
    n(next) :单步调试(逐过程)
    s(step):单步调试(逐语句)
    bt(backtrace):查看函数的调用堆栈和层级关系
    f(frame): 切换函数的栈帧
    info或locals:查看函数内部局部变量的数值
    finish:结束当前函数,返回到函数调用点
    c(continue):继续运行
    p(print):打印值及地址
    b(break)+num:在第num行设置断点
    b(break)+函数名:在某个函数头设置断点
    b(break)...if...:设置条件断点
    info breakpoints:查看当前设置的所有断点
    delete breakpoints num:删除第num个断点
    display 变量名:追踪查看具体变量值
    undisplay:取消追踪观察变量
    watch:被设置观察点的变量发生修改时,打印显示
    watch i:显示观察点
    enable breakpoints:启用断点
    disable breakpoints:禁用断点
    x:查看内存
    x(examine)/[n][f][u] addr:查看变量在对应内存地址中的值
    可选参数n表示要打印的内存单元个数,默认值为1,f表示上面介绍的各种格式的控制符,u表示要打印的内存单元长度,addr表示变量的内存地址
    x/20xw : 显示20个单元,16进制,4字节每单元
    dir dirname:指定源目录
    file 文件名:加载文件
    ptype:显示变量的类型
    info threads :查看可切换调试的线程:
    thread 线程id :切换调试的线程:
    set scheduler-locking on :只运行当前线程:
    set scheduler-locking off :运行全部的线程:
    thread apply 线程id gdb_cmd : 指定某线程执行某gdb命令
    thread apply all gdb_cmd :全部的线程执行某gdb命令
    break xxx thread ID :为某个线程设置断点
    set scheduler-locking step: 当单步执行某一线程时,其它线程不会执行,同时保证在调试过程中当前线程不会发生改变。
    但如果该模式下执行 continue、until、finish 命令,则其它线程也会执行,并且如果某一线程执行过程遇到断点,则 GDB 调试器会将该线程作为当前线程。
    NOTE:只有线程创建之后这个命令的暂停效果才有效,比如set scheduler-locking on开启之后,但pthread_create语句还没执行,这时执行continue后边创造的线程不会被暂停,必须等线程创造后再执行coneinue。
    info proc :显示当前程序可执行文件相关信息(name,pwd)

    examine(简写是x)命令使用说明来查看内存地址中的值。
    x命令的语法如下所示:
    x/<n/f/u> <addr> : n、f、u是可选的参数。
    n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

    f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

    u表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

    x/4xb &len 从len的首地址开始, 打印4个字节, 以16进制的形式。

    相关文章

      网友评论

        本文标题:gdb常用调试命令

        本文链接:https://www.haomeiwen.com/subject/cwiezrtx.html