2014-10-20 14 views
7

Naprawdę chciałem znaleźć odpowiedź online, ale nie mogłem. Czy jest jakaś różnica? Ludzie mówią, że "śledzenie" jest generowane przy czymś, co rzuca wyjątek, podczas gdy ślad stosu jest listą wywołań metod od punktu, w którym aplikacja została uruchomiona do punktu, w którym wyjątek został zgłoszony. Jeśli mamy przypuszczalny ślad stosu jako tablicę, to ostatnim elementem będzie metoda, w której wyjątek został zgłoszony. Czy odwrotny przypadek byłby dla śladu wstecznego? W języku programowania Ruby, jak na przykład, jeśli mamy:Jaka jest różnica między śledzeniem stosu a śledzeniem wstecznym?

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

Będą wyjściowe 2 różne tablice, co sugeruje mi, że coś fundamentalnie różni się o nich.

Odpowiedz

5

"Śledzenie", "ślad stosu", "ślad stosu" itp. Są nazwami tego samego przedmiotu. "Backtrace" prawdopodobnie pochodzi z narzędzia Linux o tej samej nazwie. Śledzenie stosu nie odnosi się tylko do wyjątków - bieżący stan stosu wywołań programu może zawsze być wyświetlany jako ślad stosu (który wykonuje śledzenie, ale także wiele widoków i narzędzi debuggera). Pomocne może być wyprowadzanie śledzenia stosu podczas wyjątków lub błędów.

Edycja: Whoops, myślałem, że wciąż jestem w tagu "C" - ale patrząc na dokumentację, zarówno Exception.backtrace, jak i caller powinny zawierać tablice, w których wierzchołek stosu wywołań jest pierwszy w tablicy. Wygląda na to, że różnią się głębokością i formatowaniem.

+1

Linux prawie nie istniał, gdy Ruby został stworzony, wątpię, że jakiekolwiek terminy w Ruby pochodzą stąd. Ruby została utworzona w lutym 1993 roku, a Linux w lecie 1991 roku. SLS, pierwsza dystrybucja Linuksa miała zaledwie 5 miesięcy i była cholernie niebezpieczna, kiedy Ruby zaczęła. –

+0

@ JörgWMittag Spekulacja z mojej strony i prawdopodobnie masz rację, ale to zależy od tego, kiedy Exception.backtrace został dodany w pierwszej kolejności. Jest bardziej prawdopodobne, że był popularnym terminem w tamtym czasie, ponieważ narzędzia GNU używają tego terminu (np. GDB i narzędzie backtrace, które istniało najpierw na systemie Unix). Tak jak mówiłem - tu przez przypadek! Jestem zaskoczony, że Ruby tak naprawdę jest stara. –

+1

Założona 24 lutego 1993 r., Opublikowana w 1995 r., 1.0 w Boże Narodzenie 1996 r. –