Debugger 介面
Debugger 物件是用來質詢和管理偵錯工具以及要進行偵錯之程式的狀態。
命名空間: EnvDTE
組件: EnvDTE (在 EnvDTE.dll 中)
語法
'宣告
<GuidAttribute("338FB9A0-BAE5-11D2-8AD1-00C04F79E479")> _
Public Interface Debugger
[GuidAttribute("338FB9A0-BAE5-11D2-8AD1-00C04F79E479")]
public interface Debugger
[GuidAttribute(L"338FB9A0-BAE5-11D2-8AD1-00C04F79E479")]
public interface class Debugger
[<GuidAttribute("338FB9A0-BAE5-11D2-8AD1-00C04F79E479")>]
type Debugger = interface end
public interface Debugger
Debugger 型別會公開下列成員。
屬性
名稱 | 說明 | |
---|---|---|
AllBreakpointsLastHit | 取得最後一次同時叫用的繫結中斷點集合。 | |
BreakpointLastHit | 取得最後一次叫用的中斷點。 | |
Breakpoints | 取得中斷點集合。 | |
CurrentMode | 取得整合式開發環境 (IDE) 內容中的偵錯工具目前模式。 | |
CurrentProcess | 設定或取得現用的處理序。 | |
CurrentProgram | 設定或取得現用的程式。 | |
CurrentStackFrame | 設定或取得目前的堆疊框架。 | |
CurrentThread | 設定或取得目前正在進行偵錯的執行緒。 | |
DebuggedProcesses | 取得目前正在進行偵錯的處理序清單。 | |
DTE | 取得最上層的擴充性物件。 | |
HexDisplayMode | 取得或設定運算式是以十六進位或十進位格式輸出。 | |
HexInputMode | 取得或設定運算式是以十六進位或十進位格式評估。 | |
Languages | 取得偵錯工具所支援的語言清單。 | |
LastBreakReason | 取得最後一次程式中斷的原因。如果程式正在執行,它會傳回 DBG_REASON_NONE。 | |
LocalProcesses | 取得這部電腦上目前正在執行的處理序清單。 | |
Parent | 取得 Debugger 物件的直接上層父物件。 |
回頁首
方法
名稱 | 說明 | |
---|---|---|
Break | 使指定的處理序暫停執行,如此才能分析其目前的狀態。 | |
DetachAll | 從所有附加的程式中斷連結。 | |
ExecuteStatement | 執行指定的陳述式。如果 TreatAsExpression 旗標為 true,字串會解譯為運算式,而輸出會傳送至命令視窗。 | |
GetExpression | 根據目前的堆疊框架評估運算式。如果可剖析但無法評估運算式,物件會被傳回但將不具有效值。 | |
Go | 從目前的陳述式開始執行程式。 | |
RunToCursor | 執行程式前往原始程式檔游標目前的位置。 | |
SetNextStatement | 根據游標在目前原始程式檔中的位置,設定下一個要執行的指令。 | |
StepInto | 如果可以,逐步執行下一個函式呼叫。 | |
StepOut | 跳出目前的函式。 | |
StepOver | 不進入下一個函式呼叫。 | |
Stop | 停止偵錯、結束,或是從所有附加的處理序中斷連結。 | |
TerminateAll | 結束所有處理序。 |
回頁首
備註
如同下列範例所示,使用者可以利用 DTE 物件的 Debugger 屬性,使用偵錯工具。 每個開發環境執行個體可各自擁有一個偵錯工具物件。
範例
下列範例示範如何使用 Debugger 物件。
Imports EnvDTE
Imports System.Diagnostics
Public Module Module1
' This function returns true if the debugger is actively debugging.
Function IsDebugging() As Boolean
Dim debugger As EnvDTE.Debugger
debugger = DTE.Debugger
If (debugger Is Nothing) Then
MsgBox("Debugger doesn't exist! Fatal error.")
IsDebugging = false
Else
IsDebugging = (debugger.CurrentMode <> dbgDebugMode.dbgDesignMode)
End If
End Function
End Module
// The following small C++ program can be run from the command line.
// It detects whether an instance of Visual Studio is currently
// running,and if so, prints a message stating whether its debugger
// is actively debugging.
#include <stdio.h>
#import "dte.olb" raw_interfaces_only named_guids
using namespace EnvDTE;
int main(void)
{
int nRet = 0;
CoInitialize(NULL);
IUnknownPtr pUnk;
GetActiveObject(CLSID_DTE, NULL, &pUnk);
if (pUnk == NULL) {
printf ("No instance of Visual Studio is running.\n");
}
else {
_DTEPtr pDTE = pUnk;
if (pDTE) {
DebuggerPtr pDebugger;
if (SUCCEEDED(pDTE->get_Debugger(&pDebugger)) && pDebugger != NULL){
dbgDebugMode mode;
if (SUCCEEDED(pDebugger->get_CurrentMode(&mode))) {
if (mode != dbgDesignMode) {
printf("Debugger is active.\n");
nRet = 1;
}
else {
printf("Debugger is not active.\n");
}
}
}
}
}
CoUninitialize();
return nRet;
}