Условная точка останова срабатывает, когда она не должна - PullRequest
0 голосов
/ 29 октября 2018

Я расследую исключение, которое приводит к сбою 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 правильно?

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

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

...