/ / Wie können wir die in einer C ++ - Anwendung verwendete DLL in Matlab debuggen? - c ++, windows, debugging, matlab-compiler

Wie können wir die in einer C ++ - App verwendete, von MATLAB erstellte DLL debuggen? - c ++, windows, debugging, matlab-compiler

Wir haben Matlab.m Dateien, die mit mcc zu einer DLL kompiliert wurden. Dies wird von einer C ++ - GUI-Anwendung verwendet, die wir in Visual Studio debuggen. Wenn wir den Aufruf an unsere Matlab-Funktion erreichen, können wir nur darüber springen. Wie können wir den .m-Code auf Quellcodeebene debuggen?

Ich dachte mir, es wäre leicht, etwas "Print" hinzuzufügen.Anweisungen, die in matlab eigentlich als "disp" bezeichnet werden, und beobachten, was im Ausgabefenster von VS vorbeigleitet. Aber wir sehen nichts. Nicht einmal aus printf () in der C ++ - Quelle oder wenn Sie unsere App direkt über eine Befehlszeile ausführen Statt in VS. Von Google und SO erfahren wir, dass nichts, das an stdout gesendet wird, irgendwo auftaucht (Diese Frage ist relevant: Visual Studio 2012 C ++ - Standardausgabe hat aber nicht für uns gearbeitet.)

Ich habe msgbox ("bla bla") in der versucht.m Skripte und die DLL neu aufgebaut. Nichts kam auf. Ich bin nicht sicher, ob dies funktionieren sollte, aber unser Matlab-Code wurde nicht ausgeführt, oder es wird nicht erwartet, dass msgbox in dieser Situation wie stdout funktioniert.

Wir sind mit dem druckbasierten Debugging zufrieden. Haltepunkte und andere Techniken wären nett, aber derzeit nicht erforderlich.

Wir verwenden Matlab R2016b unter Win7, Visual Studio 2015. Wir haben die .m-Quelle, aus der die DLL erstellt wurde, und wir haben die Quelle für die GUI-App, die die DLL verwendet.

Antworten:

1 für die Antwort № 1

Mehrere Artikel:

  1. Wenn Sie die Initialisierungsroutine Ihrer DLL aufrufen, rufen Sie die generierte "WithHandlers" -Version: YourDllInitWithHandlers( **, **). Die "**" sind Platzhalter für Funktionen, die die matlab disp / warn / -Fehlermeldungen annehmen, die Sie nach stdout routen OutputDebugString oder Protokoll nach Ihren Wünschen.

  2. Haben Sie möglicherweise den mcr aus Ihrem Code mit dem initialisiert -nojvm Möglichkeit? Wenn ja, werden keine Messageboxen angezeigt.

  3. Sie können nicht in die.m Quellen kompilierter Bibliotheken. Wir verwenden zwei Optionen: (a) Speichern Sie die Eingaben in Ihrem compiled-m-Code als Mat-Dateien und laden und debuggen Sie nach Belieben bei Matlab. (b) Umschalten zwischen Aufruf in eine kompilierte DLL und Aufruf in Matlab-Engine. Mit diesem API-Set können Sie starten, steuern und steuernAufruf in einen vollständig interaktiven Matlab-Desktop. Sie können Haltepunkte und Schritte wie in einer regulären Matlab-Sitzung festlegen. Dies erfordert etwas mehr Setup-Code, ist aber für das Debuggen sehr praktisch.