Должны ли Java-программы, скомпилированные с отладочной информацией, не использоваться в производственной системе?

Есть ли какая-то причина, по которой я должен избегать компиляции в отладочной информации с Javac в моих классах Java для использования на производственном сервере? Есть ли какие-либо проблемы с быстротой или безопасностью, о которых я должен знать?

Обратите внимание, что я имею в виду отладочную информацию, такую ​​как номера строк в трассировке стека, а не уровень отладки регистраторов.


Вопрос по теме:

Ответ 2

Говоря как разработчик, я бы порекомендовал оставить так много, как вам может быть неприятно. Обоснование?

В один прекрасный день вы столкнетесь с ошибкой в ​​своей программе, где ТОЛЬКО часть информации, которую вы имеете, представляет собой трассировку стека, и ошибка не может быть воспроизведена по команде, это было совершенно неожиданно для первоначальных программистов, и это ВАША работа Исправить это. Чем больше информации, доступной вам в этой трассе, тем лучше! Оставьте всю информацию об отладке!

Если вы можете, используйте фреймворк регистрации (чтобы получить трассировку стека в файл), который может предоставить информацию о jar файле, в котором был найден каждый класс. Logback может это сделать, и я считаю, что log4j тоже может.

Вам не разрешается включать всю эту информацию, но я считаю, что вам следует сначала кричать и кричать и говорить, что ее следует оставить на случай непредвиденных обстоятельств.

Я считаю, что с HotSpot это не имеет значения.

Ответ 3

Если вы имеете в виду информацию о номере линии, для печати трассировки стека, то обычно это хорошая идея. Клиент может вставлять трассировку стека в отчет об ошибке, с которым вы можете работать.

Если вы действительно обеспокоены тем, что имена ваших методов становятся видимыми, вы можете использовать ProGuard или какой-либо другой объект-обфускатор. ProGuard обладает отличным свойством, что он может де-обфускать трассировки стека, поэтому клиенты все равно могут отправить их вам.

Обфускация не идеальна, поэтому, если вы не хотите тратить силы, нет ничего плохого в том, чтобы не делать этого.

Ответ 4

В зависимости от избыточности отладки и производительности вашей программы. 90% мира с умеренной отладкой не должны беспокоиться.

Вы всегда можете использовать препроцессор для исключения кода.

Ответ 5

Я согласен с BalusC в том, что loglevels в производстве обычно могут быть установлены выше (меньше выходных) в производстве, чем в тесте. Я думаю, что полное удаление журналов будет контрпродуктивным. Даже при ошибках производственного кода, и вам нужна информация о регистрации, чтобы узнать, что произошло.

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

Я лично считаю, что программное обеспечение, установленное на производстве, должно быть как можно ближе к программному обеспечению разработки, поскольку это было протестировано чаще всего.