Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > получить стектрейс


Автор: goodday1941 6.9.2007, 10:55
в общем то нужно получить стектрейс в определенном месте программы

как вариант можно сденлать так (пока не тестировал но думаю работать должно):

Код

        try {
            throw new Exception("a");
        } catch (Exception e) {
            hashtable.put(id, e.getStackTrace());
        }



в нужном мне месте...  но может есть специальные методы для этого?

Автор: AlexeyVorotnikov 6.9.2007, 11:22
Кажется, кроме как через эксепшн, нельзя.

Кстати, эксепшн можно не кидать, стектрейс заполняется в конструкторе. Т.е. достаточно
Код

new Exception().getStackTrace()

Автор: Samotnik 6.9.2007, 12:18
или так
Код

try {
            throw new Exception("a");
        } catch (Exception e) {
            System.err.println("WARNING !!!" + e); 
        }

Автор: w1nd 6.9.2007, 12:27
Цитата(AlexeyVorotnikov @  6.9.2007,  11:22 Найти цитируемый пост)
Кажется, кроме как через эксепшн, нельзя.

С версии 1.5 можно воспользоваться методом Thread.getStackTrace()

Автор: AlexeyVorotnikov 6.9.2007, 13:16
Цитата(w1nd @ 6.9.2007,  13:27)
Цитата(AlexeyVorotnikov @  6.9.2007,  11:22 Найти цитируемый пост)
Кажется, кроме как через эксепшн, нельзя.

С версии 1.5 можно воспользоваться методом Thread.getStackTrace()

О! Век живи - век учись! Не знал про этот метод. Так, действительно, красивее.

Добавлено через 4 минуты и 32 секунды
Хи-хи smile В методе Thread.getStackTrace() всё-равно вызывается (new Exception()).getStackTrace()

Автор: batigoal 6.9.2007, 13:38
OFF: Название темы хорошее: "поучить стектрейс"  smile 

Автор: w1nd 6.9.2007, 13:39
Цитата(AlexeyVorotnikov @  6.9.2007,  13:16 Найти цитируемый пост)
В методе Thread.getStackTrace() всё-равно вызывается (new Exception()).getStackTrace()

А что за версия java? Я вижу вызов 
Код
private native static StackTraceElement[][] dumpThreads(Thread[] threads);

Автор: goodday1941 6.9.2007, 16:07
все равно мне стектрейс не то выводит что мне нужно... не в те методы лезет )

а вообще проблему уже решил )

всем пасибо кто откликнулсо!

Автор: AlexeyVorotnikov 6.9.2007, 16:16
Цитата(w1nd @  6.9.2007,  14:39 Найти цитируемый пост)
А что за версия java?

шестая

Автор: w1nd 6.9.2007, 17:48
Цитата(AlexeyVorotnikov @  6.9.2007,  16:16 Найти цитируемый пост)
шестая

А подробнее? В 1.6.0 тоже dumpThreads() smile

Автор: AlexeyVorotnikov 7.9.2007, 11:52
Цитата(w1nd @ 6.9.2007,  18:48)
Цитата(AlexeyVorotnikov @  6.9.2007,  16:16 Найти цитируемый пост)
шестая

А подробнее? В 1.6.0 тоже dumpThreads() smile

Вот полный текст метода Thread.getStackTrace():
Код

    public StackTraceElement[] getStackTrace() {
        if (this != Thread.currentThread()) {
            // check for getStackTrace permission
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkPermission(
                    SecurityConstants.GET_STACK_TRACE_PERMISSION);
            }
        if (!isAlive()) {
        return EMPTY_STACK_TRACE;
        }
        return dumpThreads(new Thread[] {this})[0];
        } else {
        // Don't need JVM help for current thread
        return (new Exception()).getStackTrace();
    }
    }

Вон там, в конце, и есть вызов (new Exception()).getStackTrace()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)