BP_LOCATION
Specifica il tipo di struttura utilizzato per descrivere la posizione del punto di interruzione.
typedef struct _BP_LOCATION {
BP_LOCATION_TYPE bpLocationType;
union {
BP_LOCATION_CODE_FILE_LINE bplocCodeFileLine;
BP_LOCATION_CODE_FUNC_OFFSET bplocCodeFuncOffset;
BP_LOCATION_CODE_CONTEXT bplocCodeContext;
BP_LOCATION_CODE_STRING bplocCodeString;
BP_LOCATION_CODE_ADDRESS bplocCodeAddress;
BP_LOCATION_DATA_STRING bplocDataString;
BP_LOCATION_RESOLUTION bplocResolution;
DWORD unused;
} bpLocation;
} BP_LOCATION;
public struct BP_LOCATION {
public uint bpLocationType;
public IntPtr unionmember1;
public IntPtr unionmember2;
public IntPtr unionmember3;
public IntPtr unionmember4;
};
Membri
bpLocationType
Un valore BP_LOCATION_TYPE dell'enumerazione utilizzata per interpretare l'unione di bpLocation o i membri di unionmemberX .bpLocation.bplocCodeFileLine
[C++ solo] contiene BP_LOCATION_CODE_FILE_LINE la struttura se bpLocationType = BPLT_CODE_FILE_LINE.bpLocation.bplocCodeFuncOffset
[C++ solo] contiene BP_LOCATION_CODE_FUNC_OFFSET la struttura se bpLocationType = BPLT_CODE_FUNC_OFFSET.bpLocation.bplocCodeContext
[C++ solo] contiene BP_LOCATION_CODE_CONTEXT la struttura se bpLocationType = BPLT_CODE_CONTEXT.bpLocation.bplocCodeString
[C++ solo] contiene BP_LOCATION_CODE_STRING la struttura se bpLocationType = BPLT_CODE_STRING.bpLocation.bplocCodeAddress
[C++ solo] contiene BP_LOCATION_CODE_ADDRESS la struttura se bpLocationType = BPLT_CODE_ADDRESS.bpLocation.bplocDataString
[C++ solo] contiene BP_LOCATION_DATA_STRING la struttura se bpLocationType = BPLT_DATA_STRING.bpLocation.bplocResolution
[C++ solo] contiene BP_LOCATION_RESOLUTION la struttura se bpLocationType = BPLT_RESOLUTION.unionmember1
[Solo c#] vedere le note su come interpretare.unionmember2
[Solo c#] vedere le note su come interpretare.unionmember3
[Solo c#] vedere le note su come interpretare.unionmember4
[Solo c#] vedere le note su come interpretare.
Note
Questa struttura è un membro BP_REQUEST_INFORMATION e BP_REQUEST_INFORMATION2 strutture.
[Solo c#] i membri di unionmemberX vengono interpretati nella seguente tabella. Cercare nella colonna sinistra per il valore e l'aspetto di bpLocationType tra le altre colonne per determinare quale ogni membro di unionmemberX rappresenta e il marshalling unionmemberX di conseguenza. Vedere l'esempio di una modalità dello schermo interpretino una parte di questa struttura in c#.
bpLocationType |
unionmember1 |
unionmember2 |
unionmember3 |
unionmember4 |
---|---|---|---|---|
BPLT_CODE_FILE_LINE |
string (un contesto) |
- |
- |
|
BPLT_CODE_FUNC_OFFSET |
string (un contesto) |
- |
- |
|
BPLT_CODE_CONTEXT |
- |
- |
- |
|
BPLT_CODE_STRING |
string (un contesto) |
string (espressione condizionale) |
- |
- |
BPLT_CODE_ADDRESS |
string (un contesto) |
string (modulo URL) |
string (nome di funzione) |
string (indirizzo) |
BPLT_DATA_STRING |
string (un contesto) |
string (espressione di dati) |
uint (numero di elementi) |
|
BPLT_RESOLUTION |
- |
- |
- |
Esempio
In questo esempio viene illustrato come interpretare la struttura di BP_LOCATION in c# per il tipo di BPLT_DATA_STRING . In questo particolare tipo come interpretare tutti e quattro i membri di unionmemberX in tutti i formati possibili (oggetto, stringa e number).
using System;
using System.Runtime.Interop.Services;
using Microsoft.VisualStudio.Debugger.Interop;
namespace MyPackage
{
public class MyClass
{
public void Interpret(BP_LOCATION bp)
{
if (bp.bpLocationType == (uint)enum_BP_LOCATION_TYPE.BPLT_DATA_STRING)
{
IDebugThread2 pThread = (IDebugThread2)Marshal.GetObjectForIUnknown(bp.unionmember1);
string context = Marshal.PtrToStringBSTR(bp.unionmember2);
string dataExpression = Marshal.PtrToStringBSTR(bp.unionmember3);
uint numElements = (uint)Marshal.ReadInt32(bp.unionmember4);
}
}
}
}
Requisiti
intestazione: msdbg.h
Spazio dei nomi: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll