2014-10-20 8 views
7

Ich wirklich, obwohl ich eine Antwort online finden würde, aber ich konnte nicht. Gibt es überhaupt einen Unterschied? Die Leute sagen, dass ein "Backtrace" erzeugt wird, wenn eine Ausnahme ausgelöst wird, während eine Stack-Trace eine Liste von Methodenaufrufen von dem Punkt, an dem die Anwendung gestartet wurde, bis zu dem Punkt reicht, an dem die Ausnahme ausgelöst wurde. Wenn wir eine Stack-Trace als Array betrachten, dann wäre das letzte Element die Methode, bei der die Ausnahme ausgelöst wurde. Wäre es umgekehrt für eine Rückverfolgung? In einer Programmiersprache wie Ruby, zum Beispiel, wenn wir haben:Was ist der Unterschied zwischen einem Stack-Trace und einem Back-Trace?

begin 
    raise 1 
rescue 
    p $!.backtrace ; p caller(0) #=> displays the back-trace, then the stack-trace 
end 

Sie werden Ausgang 2 verschiedene Arrays, die mir schon sagt etwas grundlegend anders über sie ist.

Antwort

5

"Backtrace", "Stack-Trace", "Stack Backtrace", etc. sind Namen für die gleiche Sache. "Backtrace" stammt wahrscheinlich von dem gleichnamigen Linux-Tool. Ein Stack-Trace bezieht sich nicht nur auf Exceptions - der aktuelle Status des Aufruf-Stacks des Programms kann immer als Stack-Trace angezeigt werden (was Backtrace auch tut, aber auch viele Debugger-Views und Tools). Es ist nur hilfreich, während Ausnahmen oder Fehlern eine Stapelüberwachung auszugeben.

Edit: Whoops, dachte ich war immer noch in der 'C' Tag - aber in der Dokumentation, sowohl Exception.backtrace und Anrufer sollte Arrays halten, wo die Spitze des Call-Stack ist zuerst im Array. Es scheint Unterschiede in der Tiefe und Formatierung zu geben.

+1

Linux existierte kaum, als Ruby erstellt wurde, ich bezweifle, dass irgendwelche Begriffe in Ruby von dort abgeleitet sind. Ruby wurde im Februar 1993, Linux irgendwann im Sommer 1991 erstellt. SLS, die erste Linux-Distribution, war gerade mal 5 Monate alt und buggy, als Ruby anfing. –

+0

@ JörgWMittag Spekulationen meinerseits und Sie haben wahrscheinlich Recht, obwohl das hängt davon ab, wenn Exception.backtrace an erster Stelle hinzugefügt wurde. Es ist wahrscheinlicher, dass der Begriff damals populär war, da GNU-Tools dazu neigen, diesen Begriff zu verwenden (z. B. GDB und das Backtrace-Tool, das zuerst unter Unix existierte). Wie ich schon sagte - hier zufällig! Ich bin überrascht, dass Ruby so alt ist. –

+1

Konzipiert am 24. Februar 1993, veröffentlicht 1995, 1.0 an Weihnachten 1996. –

Verwandte Themen