2009-06-10 9 views
0

Sind DIA SDK & DbgEng (nicht die DbgHelp) sowohl COM-basierte API und auf DbgHelp?Hilfe benötigt für DIA SDK & DbgEng

Wenn ja, wie kann ich DbgEng API von einer C# -Anwendung aufrufen. Ich kann die DIA-Bibliothek in C# -Projekt mit Idl-Datei (Tlibimp für generierte Tlib-Datei) importieren, aber DbgEng hat keine IDL-Datei.

Ich habe einen unvollständigen Wrapper für DbgEng gesehen, der die API mit Managed C++ manuell umschließt, aber viele der Funktionen vermisst. Kann ich DbgEng.DLL in C# automatisch importieren, ohne einen verwalteten Wrapper zu schreiben?

Zweitens, erlaubt DIA SDK einen Prozess anzuhängen und Speicher zu untersuchen (und möglicherweise einen Ausdruck auszuwerten), wie DbgEng oder es ist nur, um die Symbole aus der PDB-Datei zu bekommen? Bis jetzt habe ich nur Dia2dump, das nur die PDB-Datei analysiert.

Antwort

1
  1. DIA SDK ist nur für Symbole nicht Debuggen es Gesamtheit in keinem Zusammenhang mit DbgHelp.dll ist
  2. DbgEng.dll eine COM API haben aber nur intrfaces Sie noch etwas pinvoking tun müssen, um diese Schnittstellen zu bekommen, ist es besser, in Ihrem Fall, um alles, was Sie benötigen, mit Managed C++ zu umhüllen oder durch COM mit C++ verfügbar zu machen.
0

Es ist umgekehrt - dbghelp basiert auf DIA.

+0

nicht wahr, zumindest nicht direkt (sie verwenden möglicherweise die gleiche Code-Basis), aber Sie können DbgHelp auf Systemen ohne DIA SDK verwenden –

+0

Es ist wahr, dass dbghelp.dll nicht (dynamisch) gegen msdia80.dll, aber verlinkt dbghelp entweder statisch gegen DIA oder benutzt die gleiche Codebasis: Vergleichen Sie einfach die Ausgabe von x msdia80! * Dia * und x dbghelp! * Dia * und sehen Sie, was ich meine. –