1. 程式人生 > >gdb除錯小結

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