2015-01-21 2 views
2

Предположим я получаю следующий Java ExceptionJava отображать фактическую строку кода Java для строки в StackTrace

ERROR - Error occured while reading properties. (MyPropertyReader.java) 
    java.lang.NullPointerException 
     at com.x.MyPropertyReader.init(PropertyReader.java:**222**) 
     at com.x.MyPropertyReader.<init>(PropertyReader.java:119) 

Как вы узнали, какие все тоже блок кода выглядит как в строке 222?

Например: Вышеупомянутое исключение связано с следующей строкой кода, и я хочу видеть, как строка ниже в файлах журналов.

propertyConfiguration.getProperty("REPORT_INFLUENCE_THRESHOLD"))).trim()); 

Я хочу видеть строку REPORT_INFLUENCE_THRESHOLD в файлах журнала. Однако мне любопытно вообще, что с программно печать строки в 222 во время исполнения.

+0

Я не думаю, что это возможно, так как во время выполнения ваши файлы классов находятся в байтовом коде, поэтому я предполагаю, что ваша строка 222 больше не существует – Angivare

ответ

2

Прежде всего, вам нужно, очевидно, иметь исходные файлы в вашем пути к классам. Это или, по крайней мере, в том месте, где вы знаете, вы можете найти их.

Затем вы должны использовать Throwable's .getStackTrace(), который возвращает массив из StackTraceElements.

Последний имеет имя и строку исходного файла (IF AVAILABLE; банку может быть или не быть, скомпилировано с информацией об отладке); с этого момента, читать, находить строку, печатать!

+0

JAR один недостаточно Я понимаю, я необходимо также упаковать исходные файлы в JAR. Похоже, очень сложно. Любой другой совет? Даже я не могу иметь всю строку, имея использованный параметр: «REPORT_INFLUENCE_THRESHOLD» в этом примере было бы неплохо. –

+0

В то время как это решение слишком громоздко, я понимаю, что java не относится к классу footprint в памяти, и нет другого возможного способа автоматического получения строк. –

Смежные вопросы