使用「除錯」視圖

您可以使用「除錯」視圖來管理程式的除錯工作。 此視圖會顯示您所除錯的每一個目標已暫停的執行緒堆疊。 對於您正在除錯的每一個程式或應用程式,「除錯」視圖中會顯示除錯目標(與執行緒和堆疊框相關聯)。

下圖說明「除錯」視圖中典型的除錯目標:

「除錯」視圖

在「除錯」視圖中,頂端節點層次上會顯示用來啟動程式的除錯階段作業的啟動配置(圖中的指標 A)。 啟動配置下方會顯示一個代表除錯引擎的節點(圖中的指標 B)。 接著會顯示程式中的每一個執行緒(圖中的指標 C)。 當程式停止執行時,依預設,停止執行緒的節點會自動展開來顯示堆疊框(圖中的指標 D)。 如果您手動展開其他執行緒,則在程式下次暫停時,將會自動展開這些執行緒。 最後會顯示一個代表正在除錯的程序和程式的節點(圖中的指標 E)。

註:
  • 以單執行緒應用程式來說(不是以 libpthreads.a 來建置的應用程式), 「除錯」視圖中顯示的執行緒 ID 一律為核心執行緒 ID。通常是很大的數字。
  • 以多執行緒應用程式來說(以 libpthreads.a 來建置的應用程式), 「除錯」視圖中顯示的執行緒 ID 是 pthread ID。 這些通常是很小的數字。執行緒 ID 很大的執行緒代表目前與 pthread 無關聯的核心執行緒。 當應用程式收到非同步信號時(例如 SIGSTOP),通常就會發生這種情形。 當信號處理完畢時,這些執行緒就會消失。
  • 如果您選擇在多執行緒程序中跟隨呼叫 fork() 之後的子程序, 則除錯器只會對子程序中存在的單一核心執行緒進行除錯。 這個執行緒的 ID 將是核心執行緒的 ID。

當程式暫停執行時,編輯器中會開啟選取的堆疊框的程式檔,並反白程式即將執行的程式檔行。 如果程式中有許多執行緒,則造成停止的執行緒的堆疊可能會超出除錯框的尾端。

「除錯」視圖也可以用來設定除錯器常駐程式。 如需相關資訊,請參閱接聽除錯引擎的相關主題。

執行、終止及分離

您可以在「除錯」視圖中執行下列基本的除錯動作:

  • 若要執行應用程式,請按一下「回復」按鈕(「回復」圖示)或按 F8。
  • 若要終止除錯階段作業,請按一下「終止」(「終止」圖示)或按 Shift+F8 - 或用滑鼠右鍵按一下您要終止的除錯目標(或目標的其中一個執行緒或堆疊),然後選擇其中一個終止動作。
  • 若要讓程式脫離出來獨自執行,請按一下「切斷連線」(「切斷連線」圖示)。 視如何啟動您除錯的程式而定,也可能無法使用這個動作。

中止執行

如果您除錯的應用程式正在執行, 您可以使用暫停動作(「暫停」圖示)(Ctrl+F8) 來中止執行。 應用程式中的所有執行緒會暫停,直到您發出回復動作為止。 當您發出暫停動作時,除錯引擎會將 SIGSTOP 傳送給您正在除錯的程式。

當您有無法掌控的程序一直執行而未停在岔斷點時,中止就很有用。 藉由中止執行,您可以重新掌控應用程式。 當您中止程式時,程式通常會停在編輯器的「反組譯程式碼」視圖中。

逐步執行程式

當執行緒暫停時,您可以利用逐步控制項來逐行執行程式。 在執行逐步作業時,如果遇到岔斷點或事件,則會在岔斷點或事件上暫停執行,逐步作業到此結束。 您可以使用逐步指令在您的程式中逐步地一次執行單一指令或位置。

有下列逐步指令可用:

  • 執行過副程序「執行過副程序」圖示)(F6): 當您發出執行過副程序指令時,程式會逐步執行至下一行程式碼。
  • 進入副程序「進入副程序」圖示)(F5): 當您發出進入副程序指令時,程式會逐步執行至下一個陳述式。 如果現行行會呼叫另一個函數,則除錯器會停在該函數上。

    這個指令的行為受到使用逐行過濾器動作的影響(「使用逐行過濾器/逐步除錯」圖示)(Shift+F5)。 如果過濾器已停用(未選取按鈕),則除錯器會停在被呼叫的函數中,即使不含除錯資訊也一樣,且一定會顯示反組譯程式碼。 如果過濾器已啟用(已選取按鈕),則只有在可以顯示程式檔時,除錯器才會停在被呼叫函數的函數中。 如果無法顯示程式檔,則情況就像發出執行過副程序一樣。 DER_DBG_STEP_DEBUG 除錯引擎環境變數會影響使用逐行過濾器動作的行為。 如需除錯引擎環境變數的相關資訊,請參閱相關主題。

  • 跳出副程序「跳出副程序」圖示)(F7): 當您發出跳出副程序時,則程式會立即執行至呼叫端程式中在呼叫現行函數之後的位置。 通常會停在呼叫指令之後的位置。 如果呼叫端程式具有除錯資訊,則可能位於程式行中間。

收集服務要求的資訊

當您向 IBM 提出服務要求時,可能會透過服務要求收集,要求您收集已安裝的除錯器的相關資訊。 若要收集服務要求的資訊,請在「除錯」視圖中按一下收集服務要求的資訊,然後完成「收集資訊」對話框。 請選取位置來儲存產生的保存檔,輸入簡短說明來描述遭遇的問題,然後按一下確定來開始收集。

意見