Я расследую исключение, которое приводит к сбою JVM из-за ошибки, возникающей в собственном коде. Для этого я присоединяю VS к процессу javaw и отлаживаю функции, относящиеся к моей проблеме.
Функция, на которую я сейчас смотрю, выглядит следующим образом:
JNIEXPORT void JNICALL Java_org_bytedeco_javacpp_BoolPointer_allocateArray(JNIEnv* env, jobject obj, jlong arg0) {
bool* rptr = new (std::nothrow) bool[arg0];
jlong rcapacity = arg0;
JavaCPP_initPointer(env, obj, rptr, rcapacity, rptr, &JavaCPP_org_bytedeco_javacpp_BoolPointer_deallocateArray);
}
Это код, сгенерированный JNI для обеспечения связи между Java и собственным кодом.
Поскольку я подозреваю, что определенное условие вызывает необработанные исключения, которые в конечном итоге приводят к аварийному завершению работы JVM, используется точка останова для исследования функции, показанной выше.
Точка останова является условной и содержит следующее условие:
"arg0 < 1" is "True"
Должен срабатывать при значениях одного или отрицательных значений только . Видимо, я настраиваю это неправильно, потому что точка останова неоднократно срабатывает на значениях arg0
, таких как 3178311
.
Сначала я подумал о переполнении, при котором VS неправильно преобразовал значение в окне Local , где переменные отображаются при отладке. Однако были такие низкие значения, как 8900
, что делает эту идею маловероятной.
Также в прошлом я заметил, что иногда значения не обновляются сразу, поэтому я всегда пошагово выполняю функцию, когда срабатывает точка останова, однако значения остаются постоянно больше 0.
Что я делаю неправильно? Почему моя точка останова срабатывает? VS разрешает arg0
правильно?
Спасибо.