Schrift
[thread]12479[/thread]

$finished im Debugger setzen. um durch den Mark-and-Sweep GC zu steppen



<< >> 5 Einträge, 1 Seite
xtomcatx
 2008-09-11 17:28
#114542 #114542
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
In perldebug steht zum Kommando "q" Folgendes:
Quote
q or ^D

Quit. ("quit" doesn't work for this, unless you've made an alias) This is the only supported way to exit the debugger, though typing exit twice might work.

Set the inhibit_exit option to 0 if you want to be able to step off the end the script. You may also need to set $finished to 0 if you want to step through global destruction.

Kann mir jemand sagen, was damit gemeint ist, $finished auf 0 zu setzen? Wenn ich während des Debuggerdurchlaufs via $finished=0 setze, dann ändert sich nichts, nach dem exit wird nichts mehr ausgegeben. "x $finished" ist dann auch immer 0.
moritz
 2008-09-11 20:09
#114545 #114545
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Quote
Wenn ich während des Debuggerdurchlaufs via $finished=0 setze, dann ändert sich nichts, nach dem exit wird nichts mehr ausgegeben. "x $finished" ist dann auch immer 0.


Gibts denn in deinem Code überhaupt DESTROY-Blöcke, durch die er steppen könnte?

Übrigens hat perl keinen Mark and Sweep GC, sondern einfaches Reference Counting.
xtomcatx
 2008-09-11 20:49
#114547 #114547
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Ich will nicht vermessen erscheinen, aber hast Du denn tatsächlich Ahnung vom Garbage-Collector? Das soll wirklich kein dummer Spruch oder so sein, ich wäre für genauere Infos nämlich sehr dankbar. Ich habe mich schon etwas in das Thema GC unter Perl eingelesen und habe auch vom Thema Compilerbau ein wenig Ahnung.
Ich verstehe http://perldoc.perl.org/perlobj.html#Two-Phased-Garbage-Collection so, dass während der Programmlaufzeit in der Tat ein Referenzzähler verwendet wird, um zu entfernende Objekte auszumachen. Zu Programmende hin, wird dann aber sehr wohl M-a-S eingesetzt, um die übrig gebliebenen Objekte einzusammeln und zu zerstören.
Mit Referencecounting wäre es auch überhaupt nicht möglich, den gesamten Speicherplatz wieder frei zu machen, sonst würde sich niemand die Mühe machen, nen anderen GC zu implementieren, denn das RC ist ne schön schnelle Sache. Verklemmungen/Zyklen kannst Du damit aber leider nicht finden.
Ich kann nicht beschwören, dass M-a-S eingesetzt wird, aber irgendwas muss am Schluss noch passieren. Wieso sollte perlobj auch lügen?
Ich habe z.B. hier zwar gelesen, dass es Gerüchte um einen M-a-S in Perl geben soll, aber das bezieht sich wohl auf den Collector zu Laufzeit: http://perl.active-venture.com/pod/perltodo-somepo...

Ja, es gibt Destroyblöcke, die werden auch durchlaufen. Es ist aber ein Zyklus eingebaut und der wird erst in der "global destruction" beseitigt. Wenn ich eine debug-Ausgabe in diesem Block machen lasse, dann wird die auch ausgegeben, wenn ich das Programm normal laufen lasse, aber eben nicht im Debugger. Daher meine Frage.
moritz
 2008-09-11 21:17
#114549 #114549
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Sorry, ich war mir bisher nur der Refcounting-Phase bewusst, und dacht, dass der GC am Ende einfach relativ wahllos refcounts herabsetzen würde.
murphy
 2008-09-12 20:11
#114579 #114579
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
In perlobj steht, dass beim Beenden eines Perlinterpreters, also in einem normalen Skript am Ende jedes Threads, ein Mark-and-Sweep-Algorithmus zum korrekten Aufräumen aller Objekte benutzt wird. Während der Laufzeit des Intepreters werden aber nur die Referenzzähler benutzt.
When C++ is your hammer, every problem looks like your thumb.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-09-11 17:28.