Problem beim Debuggen/Disassembly



  • Hallo!

    Ich habe eine Anwendung (unmanaged) die über eine mixed mode DLL (Mixed.dll) einen WindowsForm Dialog aus einer managed DLL (Managed.dll) aufruft. Sieht also in etwas so aus:

    Anwendung ruft StartManaged aus Mixed.dll auf.

    extern __declspec(dllexport) bool StartManaged()
    {
    	return simres::simresIO::ShowForm();
    }
    

    simresIO ist eine statische Klasase in Managed.dll. ShowForm sieht wie folgt aus:

    Form1 frm = new Form1();
    frm.ShowDialog();
    return true;
    

    Nun zum Problem. Setze ich einen Breakpoint in der ersten Zeile in ShowForm in Managed.dll wird der auch angesprungen. Kann auch in den Konstruktor new Form1() reinsteppen und wieder raus. Sobald ich aber über ShowDialog steppe springt Visual Studio in die Disassembly-Ansicht und ab da kann ich nix mehr debuggen obwohl das bisschen Code in der Form (nur eine Messagebox anzeigen) ausgeführt wird. Auch wenn ich einen neuen Button in die Form einfügen und im Click Event-Handler einen Breakpoint setze, wird der nicht mehr angesprungen.

    Hat jemand eine Ahnung was das sein könnte? Exception oder irgendwas anderes hilfreiches kommt nicht.

    Was noch wichtig ist: Die Managed.dll befindet sich nicht im AssemblyCache und auch nicht im ApplicationBase sondern wird per AssembyResolver aus Mixed.dll von einem anderen Pfad geladen.

    Gruß
    Markus



  • AFAIK solltest Du "Application::Run(new Form1())" aufrufen...



  • Danke für die Antwort, aber das ändert leider nichts.
    Ich habe auch absolut keine Ahnung woran das liegen könnte. Ich hab das Problem aber jetzt auf ein einfacheres Beispiel reduzieren können.
    In der mixed.dll gibts nur 3 "Funktionen":
    - Konstruktor von CWinApp
    - CWinApp::InitInstance
    - Von mir exportierte Funktion

    In allen 3 hab ich einen Breakpoint. Wird die mixed.dll dann geladen (delay-Load), bleibt der Debugger beim Breakpoint des Konstruktors stehen (alles ok) und dann kurz darauf in InitInstance. Bei InitInstance bekomm ich dann aber nur mehr den Disassembly angezeigt und nicht den C++ Code. Ausgeführt wird InitInstance aber korrekt (Debug-Outputs). Anschließend ruf ich dann meine exportierte Funktion auf und die kann ich auch debuggen.

    Kennt das jemand?

    Gruß
    Markus


Log in to reply