Re[7]: jni. Чтение в C++ методе поля вложенного java объекта
От: Jakop Россия https://wmspanel.com
Дата: 23.12.09 09:46
Оценка:
Здравствуйте, ., Вы писали:

.>On 23/12/2009 01:54, Jakop wrote:


>> .>А зачем? Ведь гораздо проще юнит-тестить из явы.

>> Это если ты дебажишь обычный явоввский код. Я же дебажу явовский код
>> который юзает jni. Описанным выше способом, я бедажу dll и so
>> библиотеки jni. C-ный код дебажить то тоже нужно, особенно если его
>> несколько тысяч строк как у меня
.>Я просто подключаюсь MSVS express edition к процессу java.exe — всё прекрасно отлаживается. Кстати, прекрасно работают оба отладчика одновременно: Java и C. Под линухом не знаю, не пробовал...

Это да, но порой удобнее бывает, все-таки, инициировать отладку под студией чтобы не запускать процесс в яве и аттачить отладчик.
1)Мне чтобы отладиться нужно просто нажать f5.
2) Чтобы зааттачиться к яве нужно самому как-то запустить свое приложение отдельно и зааттачить отладчик студии к яве под которой работает мое приложение.
3) Бывает, что падает сам jni код, привем падает еще до того, как ты сможешь руками запустить отладчик и чтобы понять это лучше запустить ява-машину самому так как в этом случае сработают бряки в твоем процессе и сработают сразу
4) Я иногда использую гибридную отладку jni кода. Например я пишу большой кусок на C++. Чтобы его проверить первоначально, когда он еще вообще никак не отлажен я делаю так: создаю java объекты, которые нужны для вызова, запускаю функцию jni вызывая ее как обычную функцию на C. После отладки прогоняю тест вызывая функцию как java функцию. Обычно к этому моменту уже все работает и мне не надо аттачить отладчик студии много раз.

Пример:
jmethodID constructorID = p_env->GetMethodID (jniConnector, "<init>", "()V");
jobject connector = p_env->NewObject (jniConnector, constructorID);
jstring ip = p_env->NewStringUTF (str_ip.c_str());
jstring port = p_env->NewStringUTF (str_port.c_str());
jboolean bres = Java_xxx_xxxxxx_xxxxxx_jniConnector_init(p_env, 0, ip, port);

Поскольку я не использую this java объекта, то функция init спокойно принимает 0 в качестве instance-а объекта. Далее я отлажываю код, как обычный код C.

не убедил ?
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.