Ich versuche aktuell, eine Natvis-DLL zum Darstellen meiner Klassenobjekte im VS-Debugger zu bauen. Dazu sind mir allerdings zwei Punkte aufgestoßen, für die ich bislang keine Lösung ergooglen konnte: Kann man in der Natvis-DLL ermitteln, ob der Debugee
32- oder 64-bittig läuft (aus der "RealAddress" kann man zwar erkennen, dass ein Pointer "breiter als 32-bit" ist, falls der Pointer aber in 32-bit passt, muss das nicht zwingend heißen, dass die Anwendung 32-bittig läuft)? Des weiteren
stellt sich die Frage, ob man generell herausfinden kann, welche Anwendung soeben gedebuggt wird (ProdId, ProcHandle)?
I try to write a Natvis-DLL for presenting my own class objects in the VS debugger... but I have 2 problems/questions:
(1) How can I determine whether the debugee is 32- or 64-bit?
(2) How can I determine who the debugee is (ProcId, ProcHandle)?
Zu 1:
Würde mal DEBUGHELPER::GetProcessorType() versuchen.
Ich bekomme hier für einen 32-bit Debuggee
0x0
und für einen 64-bittigen
0x9
als Return-Wert.
Zu 2:
Was den PID betrifft, bin ich jetzt etwas überfragt - kenne mich allerdings mit VS-Erweiterungen oder der VS-Debug-Engine nicht aus.
Interessant vielleicht, daß z.B. ReadDebuggeeMemoryEx intern CppDebug!Microsoft::VisualStudio::Debugger::DkmProcess::ReadMemory
aufruft. DkmProcess Class https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.dkmprocess?view=visualstudiosdk-2017
Wobei das dann im Endeffekt, wahrscheinlich auf eine VS-Extension hinauslaufen würde.