LabVIEWForum.de
DLL mit Visual Studio2008 debuggen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: DLL mit Visual Studio2008 debuggen (/Thread-DLL-mit-Visual-Studio2008-debuggen)



DLL mit Visual Studio2008 debuggen - Lars@LabVIEW - 28.08.2009 16:31

Hallo Zusammen,

ich habe das Beispiel von:

http://zone.ni.com/devzone/cda/tut/p/id/9167 nachvollzogen. Ich würde diese nun gerne auch debuggen da ich meine eigenen Funktion hinzufügen möchte und die Erfahrungsgemäß nicht auf Anhieb funktionieren.Wink

Ich habe(wie im Bild unten dargestellt) LabVIEW.exe als Befehl angegeben, das Arbeitsvezeichnis in dem die vi und die dll liegt angegeben(der Pfad müßte stimmen den sobald ich das VI gestarte habe kann ich nicht mehr compilieren)
Und als Argument den Namen der vi beim Aufruf von LabVIEW.

Wenn ich jetzt Debuggen will wird LabVIEW auch aufgerufen aber keiner meiner Breakpoints berücksichtig. Das VI wird nicht ausgeführt nachdem LabVIEW gestartet ist. Gibt es noch ein zusätzliches Argument beim Aufruf von LabVIEW das das VI auch startet?
Ich stehe gerade auf dem Schlauch und wäre dankbar für ein Beispiel. (Ist ja eigentlich das NI.com Beispiel)Wink

Vielen Dank im Vorraus,
VG
Lars


DLL mit Visual Studio2008 debuggen - rolfk - 28.08.2009 17:00

Das VI wird nur automatisch gestartet wenn Du das auch so konfiguriert hast: File->Get VI Properties->Execution->Run when opened. Aber was hindert Dich daran in LabVIEW den Startpfeil zu drücken nachdem das VI geladen wurde?

Rolf Kalbermatter


DLL mit Visual Studio2008 debuggen - Lars@LabVIEW - 28.08.2009 17:31

Bis ich den Startpfeil gedrückt habe ist VS schon durch ohne an einem Breakpoint anzuhalten. Für VS wird die dll von LabVIEW gar nicht aufgerufen wenn ich das Problem richtig verstanden habe. (Wann wird die dll den von LabVIEW geladen? Beim öffnen oder starten des VI?)

Ich habe mal versucht nur LabVIEW zu starten ohne Argument und Verzeichniss. Dann öffnet VS LabVIEW und hält auch an aber LabVIEW hängt sich auf wenn ich das VI öffnen will.

Viele Grüße
Lars


DLL mit Visual Studio2008 debuggen - rolfk - 28.08.2009 19:47

' schrieb:Bis ich den Startpfeil gedrückt habe ist VS schon durch ohne an einem Breakpoint anzuhalten. Für VS wird die dll von LabVIEW gar nicht aufgerufen wenn ich das Problem richtig verstanden habe. (Wann wird die dll den von LabVIEW geladen? Beim öffnen oder starten des VI?)

Ich habe mal versucht nur LabVIEW zu starten ohne Argument und Verzeichniss. Dann öffnet VS LabVIEW und hält auch an aber LabVIEW hängt sich auf wenn ich das VI öffnen will.

Die DLL wird geladen wenn LabVIEW das VI lädt das die DLL enthält. Aber damit wird ausser der DLLMain() Funktion noch gar nichts aufgerufen. Und hier wirds lustig. Ein Breakpoint in DLLMain() ist eine augeszeichnete Idee um den Debugger aufzuhängen. Während des Ladens einer DLL hat Windows einige Vorkehrungen zu treffen um zu verhindern dass zum Beispiel circular Dependencies (DLL 1 lädt DLL 2 die DLL 3 lädt die wiederum DLL 1 laden möchte) zu verhindern. Dazu werden ziemlich tiefgreifende Locks gesetzt und die können sich mit dem Debugger beissen. Also ein Breakpoint in der DLLMain() ist keine allzu gute Idee. Aber da dann ja nach dem Laden der DLL noch keine normale Funktion aufgerufen worden ist, kann der Debugger bis dann auch noch nicht angesprungen sein. Du musst schon das VI das die DLL aufruft irgendwie starten.

Wie gesagt ein Breakpoint in DLLMain() ist eine sehr schlechte Idee. Mache das stattdessen in einer Deiner Funktionen und starte dann das VI das diese Funktion aufruft.

Rolf Kalbermatter


DLL mit Visual Studio2008 debuggen - Lars@LabVIEW - 28.08.2009 22:01

Guten Abend,

vielen Dank erstmal das erklärt mir warum LabVIEW abstürzt. Breakpoints an anderer Stellle werden aber nie angefahren. Ich habe das VS project und die vi mal angehängt. Die Verzeichnisse sind auf c:testdll gesetzt.

Ich schaffe es schlicht und einfach nicht das Visual Studio am Breakpoint stehen bleibt und habe langsam das Gefühl ich seh den Wald vor lauter Bäumen nicht Wald

Mit dem automatischen ausführen des VI hab ich auch keine Erfolg gehabt.

Die verwendete LV version is 8.5

Ich wünschen allen einen schönen Abend zusammen.
VG Lars

EDIT: Ich bin mir zwar noch nicht ganz sicher wo der Fehler war aber es läuft.Smile

Falls es niemanden stört würde ich das Beispiel hier liegen lassen falls jemand eine solche Frage hat. Mich hat das heute einen ganzen Tag gekostet.

Nochmal ein großes Dankeschön an rolfk!!!!


DLL mit Visual Studio2008 debuggen - rolfk - 29.08.2009 07:58

' schrieb:vielen Dank erstmal das erklärt mir warum LabVIEW abstürzt.

Ist zwar ein Detail aber LabVIEW stürzt nicht ab. LabVIEW wird beim starten durch den Debugger suspendiert (d.h. er entzieht LabVIEW die komplette Kontrolle um entsprechende Debughooks zu installieren) und danach verheddert der Debugger sich in den Locks (Blockierungen) die das Betriebssystem setzt um die DLL laden zu können und kommt nie mehr dazu die Kontrolle an LabVIEW zurückzugeben. LabVIEW ist in dieser Sache im Prinzip völlig unschuldig.

Rolf Kalbermatter