2014-10-20 14 views
7

Ho davvero trovato una risposta online, ma non ho potuto. C'è qualche differenza? Le persone dicono che un 'backtrace' viene generato su qualcosa che genera un'eccezione, mentre una traccia dello stack è un elenco di chiamate di metodo dal punto in cui l'applicazione è stata avviata al punto in cui è stata generata l'eccezione. Se si supponesse una traccia stack come una matrice, l'ultimo elemento sarebbe il metodo in cui è stata generata l'eccezione. Sarebbe il caso inverso di una traccia? In un linguaggio di programmazione come Ruby, per esempio, se si ha:Qual è la differenza tra uno stack-trace e un back-trace?

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

Saranno uscita 2 campi diversi, che mi fa pensare che c'è qualcosa fondamentalmente diverso su di loro.

risposta

5

"Backtrace", "stack trace", "stack backtrace", ecc. Sono nomi per la stessa cosa. "Backtrace" è probabile che provenga dallo strumento Linux con lo stesso nome. Una traccia dello stack non fa riferimento solo alle eccezioni: lo stato corrente dello stack di chiamate del programma può sempre essere visualizzato come traccia dello stack (come fa il backtrace, ma anche molte viste e strumenti di debugger). È utile generare una traccia dello stack durante eccezioni o errori.

Modifica: Whoops, pensavo fossi ancora nel tag 'C' - ma guardando la documentazione, sia Exception.backtrace che il chiamante dovrebbero contenere array dove la parte superiore dello stack di chiamate è la prima nell'array. Sembrano esserci differenze in quanto sono profonde e alcune formattazioni.

+1

Linux esisteva a malapena quando Ruby è stato creato, dubito che tutti i termini in Ruby siano derivati ​​da lì. Ruby è stato creato nel febbraio 1993, Linux nell'estate del 1991. SLS, la prima distribuzione di Linux aveva solo 5 mesi e buggy da morire, quando iniziò Ruby. –

+0

@ JörgWMittag Speculazione da parte mia e probabilmente hai ragione, anche se ciò dipende da quando Exception.backtrace è stato aggiunto in primo luogo. È più probabile che fosse il termine popolare in quel momento poiché gli strumenti GNU tendono a usare quel termine (ad esempio GDB e lo strumento backtrace, che esisteva su Unix per primo). Come ho detto - qui per caso! Sono sorpreso che Ruby sia così vecchio in realtà. –

+1

Concepito il 24 febbraio 1993, pubblicato nel 1995, 1.0 a Natale 1996. –