gdb 调试

基本用法

  1. gcc -g xx.c xx
  2. gdb xx

基本命令

  1. start 启动程序, 默认停留在main程序的第一行
  2. run 启动程序, 程序默认运行无参数; 可以指定参数, 跟在sh中执行命令的方式一致, 文件重定向也可以; 如果不指定参数, 则使用上一次已经指定的参数; 也可以用set args arg1..argn指定参数; 清空参数set args
  3. list 缩写l, 查看程序源代码, 默认往下显示10行, list - 表示往上查看10行, list linenum 表示查看该行前后共10行代码, list function_name 表示查看该函数定义前后共10行代码, list filename: linenum, list filename: function 分别表示查看指定文件中的特定行或者特定函数, 上下共10 行代码
  4. break 缩写b, 设置断点 break filename:funcname:labelname:linenum, 一般使用b linenum或者b funcname; 可以增加条件断点, 在描述完断点后, 增加if expression 即可
  5. continue 缩写c, 表示继续执行程序下一个断点; 如果增加参数N, 如 continue N, 则表示执行到下一个断点, 并且该断点要触发了N-1次, 才会在该断点出停下, 否则继续向下执行
  6. print expression, 打印变量的值
  7. show option 查看gdb的配置
  8. info subcommand 查看正在被调试的程序的信息, 根据子命令来区分

多进程调试

  1. set detach-on-fork off, 默认该参数的值是on
  2. set follow-fork-mode, 可以选择fork后是在父进程还是子进程中停住
  3. info inferiors 查看当前有几个进程, 每个进程都会分配一个编号,用于在不同的进程之间切换调试
  4. inferior num 根据进程分配的编号, 来切换被调试的进程

参看 http://blog.csdn.net/pbymw8iwm/article/details/787679
PS:
1. 父进程的断点会被子进程继承, 因此, 可以先在父进程中打好断点, 然后切换到子进程后, 就可以用continue直接触发断点了
2. 在fork之后, 子进程默认会停留在fork.c的某一行, 需要continue, 子进程才会继续执行
3. 子进程的调试方法, 跟普通的进程调试方法类似

推荐

  1. 默认gdb查看源码很不方便, 不能轻松看出程序执行的位置, 建议安装cgdb, 基于curse和vim的gdb, 查看源码比较方便, 代码高亮显示, 执行多进程调试时, 显示不同的源文件和执行行

参考

  1. http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值