Debugger2 介面
Debugger2 物件是用於質詢和管理偵錯工具以及要進行偵錯之程式的狀態。 Debugger2 物件會取代 Debugger 物件。
命名空間: EnvDTE80
組件: EnvDTE80 (在 EnvDTE80.dll 中)
語法
'宣告
<GuidAttribute("8B5E2BFD-4642-4EFE-8AF4-0B2DA9AAA23C")> _
Public Interface Debugger2 _
Inherits Debugger
[GuidAttribute("8B5E2BFD-4642-4EFE-8AF4-0B2DA9AAA23C")]
public interface Debugger2 : Debugger
[GuidAttribute(L"8B5E2BFD-4642-4EFE-8AF4-0B2DA9AAA23C")]
public interface class Debugger2 : Debugger
[<GuidAttribute("8B5E2BFD-4642-4EFE-8AF4-0B2DA9AAA23C")>]
type Debugger2 =
interface
interface Debugger
end
public interface Debugger2 extends Debugger
Debugger2 類型會公開下列成員。
屬性
名稱 | 描述 | |
---|---|---|
AllBreakpointsLastHit | 取得最後一次同時叫用的繫結中斷點集合。 | |
BreakpointLastHit | 取得最後一次叫用的中斷點。 | |
Breakpoints | 取得中斷點集合。 | |
CurrentMode | 傳回 IDE 內容中偵錯工具目前的模式。 | |
CurrentProcess | 取得或設定現用的處理序。 | |
CurrentProgram | 設定或傳回現用的程式。 | |
CurrentStackFrame | 取得或設定目前的堆疊框架 (Stack Frame)。 | |
CurrentThread | 取得或設定目前正在偵錯的執行緒。 | |
DebuggedProcesses | 取得目前正在進行偵錯的處理序清單。 | |
DTE | 取得最上層的擴充性物件。 | |
HexDisplayMode | 取得或設定值,指出運算式是以十六進位格式或是以十進位格式輸出。 | |
HexInputMode | 取得或設定值,指出運算式是以十六進位格式或是以十進位格式進行評估。 | |
Languages | 取得偵錯工具所支援的語言清單。 | |
LastBreakReason | 取得最後一次程式中斷的原因。如果程式正在執行中,它會傳回 DBG_REASON_NONE。 | |
LocalProcesses | 取得這部電腦上目前正在執行的處理序清單。 | |
Parent | 取得 Debugger2 物件 (DTE2) 的直接上層父物件。 | |
Transports | 取得所支援的偵錯傳輸集合。 |
回頁首
方法
名稱 | 描述 | |
---|---|---|
Break | 使指定的處理序暫停執行,如此才能分析其目前的狀態。 | |
DetachAll | 從所有附加的程式中斷連結。 | |
ExecuteStatement | 執行指定的陳述式。如果 TreatAsExpression 旗標為 true,則字串會解譯成運算式,而且輸出會傳送到 命令視窗。 | |
GetExpression | 基於目前堆疊框架評估運算式。如果運算式可以剖析但無法評估,則將會傳回物件,但它不包含有效值。 | |
GetExpression2 | 基於目前堆疊框架評估運算式。如果運算式可以剖析但無法評估,則將會傳回物件,但它不包含有效值。 | |
GetProcesses | 允許呼叫端從遠端機器取得處理序集合。 | |
Go | 從目前的陳述式開始執行程式。 | |
RunToCursor | 執行程式至原始程式檔游標目前的位置。 | |
SetNextStatement | 根據游標在目前原始程式檔中的位置,設定下一個要執行的指令。 | |
StepInto | 如果可以,逐步執行下一個函式呼叫。 | |
StepOut | 跳出目前的函式。 | |
StepOver | 不進入下一個函式呼叫。 | |
Stop | 停止偵錯並且終止所有附加的處理序或中斷它們的連結。 | |
TerminateAll | 結束目前正在執行的所有偵錯處理序。 | |
WriteMinidump | 如果這個函式是在中斷模式中偵錯某一程式,那麼它將建立目前偵錯工作階段的小型傾印 (Minidump)。 |
回頁首
備註
偵錯工具可透過 DTE2 物件的 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 EnvDTE80.Debugger2
debugger = DTE2.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 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 EnvDTE80;
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(&pDebugger2)) &&
pDebugger2
!= NULL){
dbgDebugMode mode;
if (SUCCEEDED(pDebugger2->get_CurrentMode(&mode))) {
if (mode != dbgDesignMode) {
printf("Debugger is active.\n");
nRet = 1;
}
else {
printf("Debugger is not active.\n");
}
}
}
}
}
CoUninitialize();
return nRet;
}