Bài viết phổ biến của tác giả
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。
为什么会这样?如何解决?
如果有人知道要点,请教我。
抱歉,信息不足。
这是我的代码。
std::string toStdStr(JNIEnv* env, jstring jstr)
{
const char* chars = env->GetStringUTFChars(jstr, 0); //<-dvmAbort
std::string stdstr;
if( NULL==chars ) {
stdstr = "";
}khác{
stdstr = std::string(chars );
env->ReleaseStringUTFChars(jstr, chars );
}
return stdstr;
}
下面是 nkd-stack 故障转储。
我用xxxxxxxx覆盖了隐私信息
********** Crash dump: **********
Build fingerprint: 'xxxxxxxx'
pid: xxxxxxxx, tid: xxxxxxxx, name: Thread-78 >>> xxxxxxxx <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc xxxxxxxx /system/lib/libc.so (tgkill+12)
Stack frame #01 pc xxxxxxxx /system/lib/libc.so (pthread_kill+48)
Stack frame #02 pc xxxxxxxx /system/lib/libc.so (raise+10)
Stack frame #03 pc xxxxxxxx /system/lib/libc.so
Stack frame #04 pc xxxxxxxx /system/lib/libc.so (abort+4)
Stack frame #05 pc xxxxxxxx /system/lib/libdvm.so (dvmAbort+78)
Stack frame #06 pc xxxxxxxx /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+146)
Stack frame #07 pc xxxxxxxx /system/lib/libdvm.so
Stack frame #08 pc xxxxxxxx /system/vendor/lib/libxxxxxxxx.so toStdStr(_JNIEnv*, _jstring*)+56): Routine _JNIEnv::GetStringUTFChars(_jstring*, unsigned char*) at /home/softdev/opt/android-ndk-r9d/platforms/android-19/arch-arm/usr/include/jni.h:879
...
Cảm ơn!
2015/04/30 添加后记
我发现在 jni.cpp 的第 365 行的 ReportJniError 中调用了 abort。
Cross Reference: /dalvik/vm/Jni.cpp
这是默认路径。什么时候发生?来这里有什么条件?
1 Câu trả lời
这意味着 jstr
在传递给 toStdStr
时无效。尝试 env->CreateGlobalRef(jstr)
before toStdStr
调用。不要忘记发布全局引用。
关于android - GetStringUTFChars 中的 dvmDecodeIndirectRef 中的 dvmAbort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822236/
Tôi đã phát triển một ứng dụng Android bằng jni. Tôi nhận được lỗi dvmabort trong dvmDecodeIndirectRef của GetStringUTFChars. Tôi chỉ dừng lại một lần. Tại sao lại thế này
Tôi là một lập trình viên xuất sắc, rất giỏi!