gdb调试小结

1、查看堆栈
   gstack <pid>
2、挂载到正在运行的进程
  gdb attach <pid>
3、调试core文件
   gdb <app> <app.core>
   gdb -c <app.core> <app>
4、设置产生core
   查看当前core设置:
   a) ulimit -a
   b) cat /proc/sys/kernel/core_pattern
   开启core并修改其位置:
   a) ulimit -c unlimited
   b) echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
   c) echo "1" > /proc/sys/kernel/core_uses_pid
   其中第3个带pid,第2个带程序名、pid、时间戳。
   注意:该方法是临时修改,系统重启后失效。永久修改可以在/etc/sysctl.conf里面按语法规则追加。
5、常用gdb命令
   a) 查看堆栈(backtrace)
      bt
      t a a bt
      第2个对所有线程打印堆栈(thread apply all backtrace)
   b) 进入堆栈第3层(frame)
      f 3
   c) 查看源码片段(list)
      list
   d) 查看断点(info)
      info break
   e) 设置断点(break)
      b funcA
      b 1038
      b file.c:funcA
      b file.c:1038
      b 1038 if i==99
   f) 打印变量(print)
      p retValue
   g) 运行至断点(run)
      r
   h) 继续执行到下个断点(continue)
      c
   i) 单步进入函数(step)
      s
   j) 单步执行(next)
      n
   k) 跳出函数(finish)
      finish
   l) 监视变量值变化(watch)
      watch p
   m) 帮助与退出(quit)
      help
      q
6、编译带调试信息的二进制
   gcc -g app a.c b.c
7、生成符号表
   objcopy --only-keep-debug app app.symbols
8、用gdb拉起进程
   gdb --args app p1 p2 p3
   gdb -s app.symbols -e app

猜你喜欢

转载自www.cnblogs.com/momo0609/p/10068251.html