none
Natvis-DLLs... 2 Fragen

    Frage

  • 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)?
    Montag, 7. Mai 2018 08:15

Alle Antworten

  • 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)?
    Mittwoch, 11. Juli 2018 08:23
  • 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.

    Mit freundlichen Grüßen


    Mittwoch, 11. Juli 2018 13:36