User since
2005-10-19
44
Artikel
BenutzerIn
Hi, habe folgendes Problem.
Ich rufe Funktionen aus einer DLL mittels Perl auf.
Da gibt es auch eine Funktion die auf einen vorher gesetzten Breakpoint laeuft.
Ich moechte gern das ich z.B. 10 sec warte. Sollte er dann noch nicht in den Breakpoint gelaufen sein soll die Ausfuehrung beendet werden.
Hoffe auf eine baldige Antwort
User since
2005-04-13
625
Artikel
BenutzerIn
Du kannst sleep() in einer Schleife verwenden, jeweils mitzählen, wie oft du gewartet hast und dann beenden
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
http://perl-tutor.de
User since
2003-08-04
14371
Artikel
ModeratorIn
Naja, Du rufst also eine Funktion in einem Perl-Programm auf? Damit Du dann gleichzeitig etwas anderes machen kannst, muesstest Du mit
fork() oder aehnlichem arbeiten. Wenn Du
machst, dann wird das sleep ja erst gemacht, nachdem die Funktion beendet wurde...
Oder habe ich jetzt was falsch verstanden?
User since
2005-10-19
44
Artikel
BenutzerIn
Das ging aber schnell mit der Antwort.
@renee: du hast das Problem genau erfasst.
In die Funktion selber kann ich leider nicht rein, sprich ich kann darin nichts aendern.
Ich habe lediglich Zugriff auf den Funktionsaufruf.
Leider sagt mir fork() ueberhaupt nichts. Kann mir das wer erklaeren was das ist und wie das funktioniert?
User since
2005-04-13
625
Artikel
BenutzerIn
perldoc -f fork
Damit kannst du einen neues Prozess starten.
Auf renees Homepage ist auch eine PDF zum thema fork()
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
http://perl-tutor.de
User since
2003-08-04
7321
Artikel
ModeratorIn
was ist das für eine dll?
eigentlich kann sie nur in einen break-point laufen, wenn sie im debug-mode compiliert wurde!
oder stürzt sie einfach ab ?
User since
2005-10-19
44
Artikel
BenutzerIn
In der DLL befinden sich Funktionen in C die auf einem Microcontroller ausgefuerht werden. Mir ist es moeglich die Funktionen aufzurufen und mittels single step durchzusteppen.
Meiner Meinung nach handelt es sich um eine Release Version, aber wo soll denn da der Unterschied sein, das geht mir noch nicht so recht ein.
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=fritz,20.12.2005, 13:17]Mir ist es moeglich die Funktionen aufzurufen und mittels single step durchzusteppen.[/quote]
hmm...
wie machst du das denn?
bzw. wie wurde denn da ein break-point reinkompiliert ?
User since
2005-10-19
44
Artikel
BenutzerIn
Also zum Ablauf,
Zuerst lade ich auf eine Microcontroller ein Programm ( Blinkprogramm)
Danach setze ich mittels einer Funktion einen Breakpoint. ( Funktion in der DLL )
Jetzt moechte ich mit einer RUN TO BREAKPOINT Funktion auf diesen Breakpoint auflaufen. Das funktioniert auch alles ganz wunderbar.
Wenn ich jetzt aber einen Breakpoint auf eine Adresse setze auf der ueberhaupt kein Statement liegt, laeuft die RUN TO BREAKPOINT
Funktion ewig und der Programmablauf stoppt.
Jetzt moechte ich in so einem Fall diese Funktion abbrechen. Da bei gueltiger Adresse der Breakpoint nach spaetestens 5 sec erreicht wird, will ich nach 10 sec mit dem Programmablauf weitermachen und als Rueckgabe " Breakpoint nicht gefunden " zurueckgeben.
Jetzt hab ich mir gedacht das ich mit dem Child Prozess den aufruf mache und nach Eintreffen im Breakpoint an den Parent eine 1 zurueckgebe.
Der Parent schlaeft 10 sec und fragt dann ab was vom Child gekommen ist und handelt dementsprechend.
Soweit die Theorie, jetzt die Praxis.............................:p
User since
2005-10-19
44
Artikel
BenutzerIn
ach und noch was, funkioniert diese Fork funktion ueberhaupt weil ich unter windows programmiere und jetzt schon oefter gelesen habe das es da nicht geht und dann aber doch wieder ohne Probleme funktioniert.