Мое приложение начало недетерминированно давать сбой после обновления до Java 8. Оно не генерирует исключение и не печатает сообщение об ошибке. Единственным признаком его отказа является код выхода -559038737. Кто-нибудь сталкивался с этим?
Код выхода JVM 8 -559038737 (0xDEADBEEF)
Ответы (1)
Этот код выхода, вероятно, взят из Apache Commons Exec:
public interface Executor {
/** Invalid exit code. */
int INVALID_EXITVALUE = 0xdeadbeef;
...
Есть некоторые изменения в Java 8, которые могли вызвать ошибку.
Но не зная вашего пути к классам и кода, это всего лишь обоснованное предположение.
Возможно, вы используете асинхронный способ использования Commons Exec:
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
Executor executor = new DefaultExecutor();
executor.execute(cmdLine, resultHandler);
int exitValue = resultHandler.waitFor();
return exitValue;
Таким образом, исключение фиксируется только в обработчике результатов, но не печатается автоматически в stderr?
person
DiegoG
schedule
08.05.2014
Я использую Commons Exec для запуска процесса JVM. Как вы думаете, приведет ли сбой JVM к тому, что Exec вернет этот код выхода, но не зафиксирует вывод ошибки, который распечатывает JVM? Я видел аналогичную проблему в Java 8, где вывод stderr не записывается, когда вызываемое java-приложение использует System.Exit(). Однако вывод трассировки стека необработанного исключения, похоже, записывается.
- person Aleksandr Dubinsky; 08.05.2014
Я отредактировал ответ, чтобы ответить на этот вопрос, возможно, вы используете неблокирующий способ использования этой библиотеки, который не печатает трассировку стека автоматически.
- person DiegoG; 09.05.2014
Отсутствие (некоторых) вывода
stderr
(или stdout
, если на то пошло) совсем не удивительно для System.exit()
, поскольку буферы вывода не будут очищаться или могут не сбрасываться на некоторых JVM.
- person Lawrence Dol; 09.05.2014
System.exit(0xDEADBEEF)
где-то внутри стороннего кода. - person Marko Topolnik   schedule 29.04.20140xDEADBEEF
как кода выхода ни в источниках JDK, ни в HotSpot. Это может быть библиотека. Поместите точку останова наjava.lang.Runtime.exit
и наjava.lang.Runtime.halt
, если это возможно. Если невозможно установить точку останова в производственной системе, вы можете перекомпилировать классRuntime.java
, чтобы распечатать трассировку стека дляexit
иhalt
. - person apangin   schedule 30.04.2014java/lang/Runtime.java
изsrc.zip
, включенного в JDK, измените его по своему усмотрению, скомпилируйте с помощью javac и, наконец, включите в путь к классам начальной загрузки при запуске приложения с помощью параметра командной строки-Xbootclasspath/p:/path/to/alt/classes
. - person apangin   schedule 30.04.2014src/main/java/java/lang/Runtime.java
в свой проект Maven и создам банку, какой флаг JVM мне следует использовать? - person Aleksandr Dubinsky   schedule 01.05.2014-Xbootclasspath/p:/path/to/project.jar
- person apangin   schedule 01.05.2014dead beef
. - person Vishrant   schedule 08.05.2014exit
, так что либо выход происходит из-за неквалифицированного программиста, либо действительно была какая-то дикая ссылка. - person Hot Licks   schedule 08.05.2014