INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

DLL mit Visual Studio2008 debuggen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

28.08.2009, 16:31
Beitrag #1

Lars@LabVIEW Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Aug 2009

8.6
2009
de_en

98693
Deutschland
DLL mit Visual Studio2008 debuggen
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


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2009, 17:00 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2009 17:02 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit Visual Studio2008 debuggen
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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2009, 17:31
Beitrag #3

Lars@LabVIEW Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Aug 2009

8.6
2009
de_en

98693
Deutschland
DLL mit Visual Studio2008 debuggen
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2009, 19:47 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2009 19:49 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit Visual Studio2008 debuggen
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2009, 22:01
Beitrag #5

Lars@LabVIEW Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Aug 2009

8.6
2009
de_en

98693
Deutschland
DLL mit Visual Studio2008 debuggen
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!!!!


Angehängte Datei(en)
Sonstige .rar  testdll.rar (Größe: 1,14 MB / Downloads: 241)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2009, 07:58 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2009 07:59 von rolfk.)
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit Visual Studio2008 debuggen
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Labview Import / DLL debuggen galilio 36 54.494 10.11.2015 21:42
Letzter Beitrag: rolfk
  Labview-Code in Visual Studio GladiatoreSardo 1 5.716 12.11.2012 10:41
Letzter Beitrag: GerdW
  LV DLL in Visual Basic verwenden sm 3 7.484 03.05.2011 13:34
Letzter Beitrag: rolfk
  DLL in Visual C++ 2010 programmieren tt-web 2 7.441 02.05.2010 12:17
Letzter Beitrag: tt-web
  Visual Basic DLL in LabVIEW einbinden jacket12 2 9.753 10.06.2008 09:54
Letzter Beitrag: jacket12

Gehe zu: