2010-07-28 13 views
12

Vorrei sapere se è possibile accedere allo stack di chiamate da un metodo per vedere quale metodo in quale pacchetto si chiama quello in cui ci troviamo ora?Accesso allo stack di chiamate Java

O forse c'è un altro modo per farlo?

Grazie,

ExtremeCoder

P.S. Questo è tutto in Java

risposta

18

C'è un modo:

Thread.currentThread().getStackTrace() 

Ma non ci deve essere un motivo per fare questo non per scopi di debug.

+1

+1: Certamente non dovrebbe cambiare il comportamento basato sul chiamante, ma quello sopra è esattamente come ottenere le informazioni. Inoltre, se sei bloccato con 1.4 allora devi andare in giro con le eccezioni per ottenere le informazioni; vale la pena eseguire l'aggiornamento a Java5 anziché eseguire questi tipi di hack IMO. –

+0

Oh, l'altro caso per fare cose con la lettura dello stack è se si stanno facendo contesti di sicurezza, ma è davvero molto meglio usare gli strumenti della politica di sicurezza che avete già ottenuto per quello. –

+0

La risposta è corretta, ma non sono d'accordo sull'utilizzo di questo solo per il debug. Nella mia applicazione ho scritto un wrapper al Log4j che invia i messaggi di registrazione all'appender in base al nome del chiamante. Quindi puoi aggiungere un messaggio di log con una sola riga, senza chiamare esplicitamente a 'Logger.getLogger()' nel codice. È possibile chiamare la funzione di registrazione uno scopo di debug, ma comunque. – jutky

Problemi correlati