1. 程式人生 > >GDB常用除錯命令(二)

GDB常用除錯命令(二)

    • GDB訊號處理

      在GDB中使用handle命令定義一個訊號處理。訊號可以以SIG開頭或不以 SIG開頭,可以用定義一個要處理訊號的範圍(如:SIGIO-SIGKILL,表示處理從SIGIO訊號到SIGKILL的訊號,其中包括SIGIO, SIGIOT,SIGKILL三個訊號),也可以使用關鍵字all來標明要處理所有的訊號。一旦被除錯的程式接收到訊號,執行程式馬上會被GDB停住,以供除錯。其可以是以下幾種關鍵字的一個或多個:

      nostop:
        當被除錯的程式收到訊號時,GDB不會停住程式的執行,但會打出訊息告訴你收到這種訊號

      stop:
        當被除錯的程式收到訊號時,GDB會停住你的程式

      print:
        當被除錯的程式收到訊號時,GDB會顯示出一條資訊

      noprint:
        當被除錯的程式收到訊號時,GDB不會告訴你收到訊號的資訊

      pass/noignore:
        當被除錯的程式收到訊號時,GDB不處理訊號。這表示,GDB會把這個訊號交給被除錯程式會處理

      nopass/ignore:
        當被除錯的程式收到訊號時,GDB不會讓被除錯程式來處理這個訊號

      檢視有哪些訊號被GDB檢測:

        info handle/signals

 

    • 檢測點(checkpoint)使用

      checkpoint使用

    • 跟蹤點

       tracepoint:只跟蹤記錄資訊而不會中斷程式的執行。當程式是實時執行時,或者與其他的程式有互動時,除錯者希望使用跟蹤點監控程式而又不打斷程式的執行。

      與斷點相同的是,跟蹤點會儲存下在跟蹤點時的一些記憶體資訊供使用者查閱,例如陣列或者物件;另外,tracepoints可以通過save命令儲存,以方便使用者下次再次進入程式除錯時不需要重設這些跟蹤點。