gdb:不退出程序的情況下打印函數中的局部變量

參考資料:點擊打開鏈接
  藉助於上面的參考資料,編寫自己的腳本工具。參考資料中也是借鑑pstack這個工具,它是用一個腳本,腳本中通過調用gdb來打印當前運行的棧信息,而不用中斷程序或手動gdb。更多的信息,還是去看參考資料吧,上面講的比較詳細。

  我的腳本如下:

#!/bin/sh
command="source key.gdb"
readnever=""
GDB=${GDB:-/usr/bin/gdb}
i=0
result=""
 
$GDB --quiet $readnever -nx /proc/$1/exe $1 <<EOF 2>&1 |
set width 0
set height 0
set pagination no
$command
EOF
awk '/^\$/{print $0}' | awk '{print $3}'
上面的就是一個shell腳本,使用awk是爲了過濾輸出的信息,這裏只是針對我的需求的過濾規則,你要使用的話,可以選擇sed或其他擅長的工具。真正的gdb命令保存在key.gdb中,如下所示:

b fcache_cluster.c:245
c
p/x ((struct sockaddr_in*)node)->sin_addr.s_addr
方法很簡單,就是在想要打印的局部變量賦值後的位置添加一個斷點,然後執行"c"命令,然後添加一條打印局部變量的命令。
如果想要多次查看局部變量的值,可以使用watch工具或者直接在shell中使用for或while循環來調用上面的shell腳本


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章