《Debug Hacks》-讀到Hack7

緣起

  • 雖然豆瓣上老早就標註爲想看了,但20190416偶然搜到的這本書,20190417開始看了40頁左右,7個Hack,以目前的情況要看10個才能第1遍擼完。

內容

chap1 熱身準備 19/419

Hack一、調試是什麼

Hack二、Debug hacks的地圖 22/419

Hack三、調試的心得 24/419

  • 復現以前
  • 復現以後架構

    • 確認現象
    • 確認復現率和時間
  • 分析
  • 找不出緣由函數

    • 做者把鍋甩給硬件,哈哈---lionel
    • 找之前的同類bug
這部份內容讓我想到了,吳軍說的 專業和業餘的區別

chap2 調試前的必知必會 31/419

Hack四、獲取進程的內核轉儲 31/419

  • 啓用內核轉儲命令行

    • 啓用 ulimit -c unlimted
    • gdb -c core.* ./a.out //core文件 進程
    • gdb l 5--這個能夠看到文件的第幾行?在調試core的時候?
  • 在專用目錄中生成內核轉儲調試

  • 使用用戶模式輔助程序自助壓縮內核轉儲文件對象

    • exec gzip ->
    • lionel,這個理解了,還沒好好看呢
  • 啓用整個系統的內核轉儲功能進程

    • 34/419

Hack五、調試器的基本使用方法(之一) 36/419

  • 準備ip

    • gcc -Wall -02 -g 源文件
    • Makefile中指定CFLAGS = -Wall -02 -g
    • 使用configure腳本生成Makefile,./configure CFLAGS="-Wall -02 -g"
    • 構建方法一般會寫在INSTALL、README等文件中。
  • 啓動內存

    • $gdb 可執行文件名
  • 設置斷點

    • b file.c :110 // 經過指定文件名和行號,我第一次用時,不知道

      • break +偏移量 【暫停位置日後3行這2個沒用過
      • break -偏移量
      • break *地址
      • b 後面啥也不加,就會在下一行設置斷點
    • info break用於查看設置好的斷點
  • 運行

    • run能夠簡寫成r,而後加參數
    • start命令也能夠? 我也用得極少
  • 顯示棧幀

    • backtrace簡寫bt,別名還有whereinfo stack簡寫成info s
    • 我主要用在調試core的時候了
    • bt N 只顯示開頭N個幀;bt -N只顯示最後N個的幀;
    • bt full 3從外向內顯示3個棧幀,及其局部變量。 這個就沒用過
  • 顯示變量

    • p 變量
  • 顯示寄存器

    • info registers簡稱info reg
    • p/格式 變量

      • 寄存器可以使用的格式
  • 單步執行

    • nextn
    • steps,進入函數內部。書中寫錯了
    • nextistepi逐條執行彙編指令
  • 繼續運行

    • continue簡寫爲c
    • 有種我以前不知道的c 5表示5次遇到斷點不中止,第6次遇到斷點時才暫停執行。
  • 監視點

    • watch <表達式> 這個使用得比較少
  • 刪除斷點和監視點

    • delete <編號>d 2或者d 2-10
  • 其它斷點
  • 改變變量的值

    • set variable <變量>=<表達式> 這個在我項目中,是有想過,但沒找到解決方案
  • 生成內核轉儲文件

    • generate-core-file
    • gcore命令能夠直接從命令行直接生成內核轉儲文件。

Hack六、調試器的基本使用方法(之二) 50/419

  • attach到進程

    • attach pid 上回看人家調試的時候,就用了attach這個命令
    • 在gdb和進程分離時使用detach命令,這樣進程能夠繼續運行
    • info proc顯示進程信息
  • 條件斷點

    • break 斷點 if 條件,舉例b iseq_compile if node==0
    • condition 斷點編號
  • 反覆執行

    • ignore 斷點編號 次數
    • finish命令執行完當前函數後暫停
    • until命令執行完當前函數等代碼塊後暫停,執行完循環後暫停
  • 刪除斷點和禁用斷點

    • clear刪除已定義的斷點
    • disable臨時禁用;enable斷點從新啓用
    • disable display 顯示編號
    • disable mem 內存區域
  • 斷點命令

    • commads能夠定義在斷點中斷後自動執行的命令。
  • 經常使用命令及省略形式(別名)

    • x顯示內存內容
    • info顯示調試對象的各類各樣的信息
    • list顯示函數或行
    • show顯示GDB內部的功能、變量和選項

Hack七、調試器的基本使用方法(之三) 57/419

  • 值的歷史

    • 最後的值能夠用p $來訪問
    • show value能夠顯示歷史中的最後10個值。
  • 變量

    • set $i=0 ,隨意定義變量; p $i
  • 命令歷史

    • show history,命令歷史文件們於./.gdb_history
  • 初始化文件(.gdbinit)
  • 命令定義

Hack八、Intel架構的基本知識 63/419

chap4 應用程序調試實踐 157/419

Hack2六、發生SIGSEGV,應用程序異常中止 157/419

收穫

  • 20190417看了Hack7,有一些小點不會,但80%都是用過的,後面項目中多實踐。最好自已能寫個例子,用於驗證自已不知道的命令
相關文章
相關標籤/搜索