gdb调试

1. gcc a.c b.c c.c -o app==>gcc a.c b.c c.c -o app -g

-g:会保留函数名和变量名

2. 启动gdb

  • gdb 可执行程序的名字
  1. gdb app
  2. 给程序传参:set args xxx xxx

3. 查看代码--l/list(默认打开main函数所在文件)

  • 当前文件:
    • l
    • l 行号
    • l 函数名
  • 非当前文件
    • l 文件名:行号
    • l 文件名:函数名
  • 设置显示的行数
    • set listsize n
    • show listsize

4. 断点操作:b/break

  • 设置断点:
    • b 行号
    • b 函数名
    • b 文件名:行号
    • b 文件名:函数名
  • 查看断点
    • i/info b
  • 删除断点
    • d num(断点编号)
    • 删除多个:d num1 num2;d num1-num6
  • 设置断点无效
    • dis num(编号)
  • 断点生效
    • ena num(编号)
  • 设置条件断点
    • b 行号 if 变量==var

4. 调试相关的命令

  • 让gdb跑起来
    • r(run):停在第一个断点的位置
    • start:运行一行,停止
  • 打印变量的值:
    • p 变量名
  • 打印变量的类型:
    • ptype 变量名
  • 变量的自动显示:
    • display 变量名
    • 取消:undisplay 编号
    • 查看display信息:i display
  • 向下单步调试:
    • n(next):不会进入函数体
    • s(step):会进入待函数体内部
    • finish:跳出函数体
  • 从循环体直接跳出:
    • until(不能有断点)
  • 直接设置变量等于某一个值
    • set var 变量名=value
  • 继续运行gdb,停在下一个断点的位置
    • c(continue)
  • 退出gdb:
    • q(quit)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,623评论 0 26
  • 调试前准备 获取进程的内核转储(core dump) why:最大好处是,其保存了问题发生时的状态。记录进程当前状...
    Gitlusen阅读 967评论 0 2
  • 通玄大陆西南方某处山谷里,某道人模样的人停止了手上的劳作,挺起腰扶正了头上的草帽摸着山羊胡遥望东方道:“终于在这一...
    李老师家的乖孩子阅读 316评论 0 0
  • 从实教育工作已经有八年的年头了,自己最初走上教育的目标就是为了给学生一个温暖的怀抱。
    张馨匀_05c8阅读 92评论 0 0
  • 在经历连续几天的情绪低落后,自己也在不停地反思,自己现在的状态对身边的发生的事有帮助?对孩子的学习提高有帮助?...
    黄永玲阅读 178评论 2 1