1

Die Situation ist:vshost32-clr2.exe hängt, wenn extern Funktion aufrufen, wenn native Code-Debugging deaktiviert

In meiner C# Lösung (VS 2013) Ich habe ein C-Projekt hinzugefügt. Das C-Projekt enthält eine Funktion, die in C# mit deklariert ist:

[DllImport("My_C_Dll.dll", CallingConvention = CallingConvention.Cdecl)] 
private static extern void My_C_Function(IntPtr OutputArray, int Input); 

Die Funktion mit diesem Code aufgerufen wird:

var OutputArray = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(UInt16)) * OutputLength); 

My_C_Function(OutputArray, Input); 

Int16[] ManagedOutputArray= new Int16[OutputLength]; 
Marshal.Copy(OutputArray, ManagedOutputArray, 0, OutputLength); 
Marshal.FreeHGlobal(OutputArray); 

Die Frage:

Wenn "My_C_Function" genannt wird, die Anwendung hängt (tatsächlich ist die Visual Studio-Hosting-Prozess „vshost32-clr2.exe“, das hängt), wenn alle folgende Bedingungen erfüllt sind:

  • , wenn ich mit dem Debugger angeschlossen (ab Anwendung von Visual Studio) laufen

  • , wenn ich die "Enable native Code-Debugging" in den Projekteigenschaften

  • deaktivieren, wenn ich das ENABLE „Aktivieren Sie den Visual Studio-Hosting-Prozess“

Meine Idee

Es scheint, dass "vshost32-clr2.exe" nicht mehr funktioniert, weil es die C extern-Funktion nicht ausführen kann, wenn das Debuggen des systemeigenen Codes deaktiviert ist. Es scheint, dass es ein Feature benötigt, das nur gegeben wird, wenn "Debuggen des systemeigenen Codes" aktiviert ist.

Mein Problem scheint das gleiche von AccessViolationException goes away when native code debugging is enabled aber niemand hat bereits beantwortet, warum dies geschieht.

Meine Frage WARUM? Für ein anderes Projekt habe ich bereits eine andere Lösung gemacht, die ein anderes C extern Funktionen ohne ein solches Problem aufruft (Ich kann den "Hosting-Prozess" aktiviert lassen und das "native Code-Debugging" ohne Probleme deaktiviert), aber ich kann den Unterschied zwischen den beiden nicht finden Lösungen, die zu diesem Fehler führen.

Jede Hilfe würde sehr geschätzt werden!

+0

aktivieren JIT-Debuggen oder die Ausnahme Fenster, erhalten Sie keine Ausnahmemeldungen? Für das Debugging im Mischmodus müssen wir das Debuggen des systemeigenen Codes im C# -Projekt aktivieren. Wenn Sie den Hostprozess deaktivieren und das Debuggen von systemeigenem Code aktivieren, debuggen Sie Ihre App normalerweise? –

+0

@Jack Zhai, wenn ich das Hosting deaktivieren und lassen Sie das Debuggen des systemeigenen Codes aktiviert es funktioniert. Nur wenn ich das Hosting ohne nativen Code verwende, stört das Debugging den Hostingprozess. Ich setze Visual Studio auf eine mögliche Ausnahme (ausgelöst und nicht behandelt) zu stoppen, aber der Debugger nicht beendet. Wenn ich den Code Schritt für Schritt durchführe, merke ich, dass er hängt, wenn ich "My_C_Function" anrufe. – Homer1982

+0

Erhalten Sie Nachrichten im Ausgabefenster? –

Antwort

0

Durch die Deaktivierung Code-Optimierung in C++ Projekt Eigenschaften-> C/C++ -> Optimierung ich in der Lage habe eine nicht behandelte Ausnahme in C++ Code zu finden. Nachdem ich ein paar kleine Speicherlecks behoben hatte, gelang es mir, es sogar mit aktivem Hosting-Prozess und deaktiviertem Debuggen von nativem Code zum Laufen zu bringen.