May*_*ank 3 android memory-leaks native android-ndk
我试图使用setprop libc.debug.malloc = 1来查找泄漏.我做了一个演示程序并引入了内存泄漏,但上面的标志无法检测到这个泄漏.我试过下面的命令:adb shell setprop libc.debug.malloc 1 adb shell stop adb shell start
jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env,
jobject thiz) {
int *p = malloc(sizeof(int));
p[1] = 100;
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
任何帮助,将不胜感激.
谢谢
libc.debug.malloc不是valgrind.它跟踪本机堆分配,但不直接检测泄漏.它最适合与DDMS结合使用; 请参阅此答案,了解有关将其用于本地泄漏追踪的信息(也许是这个较旧的答案).
(注意,您可以在最新版本的Android上使用valgrind,但设置它可能是一次冒险.)
FWIW,不同级别的libc.debug.malloc相当好的发现使用后免费和缓冲区溢出:
/* 1  - For memory leak detections.
 * 5  - For filling allocated / freed memory with patterns defined by
 *      CHK_SENTINEL_VALUE, and CHK_FILL_FREE macros.
 * 10 - For adding pre-, and post- allocation stubs in order to detect
 *      buffer overruns.
例如,如果您为上面的示例设置libc.debug.malloc = 10并添加了一个free()调用,您可能会收到来自库的警告消息,因为您设置的p[1]而不是p[0].
| 归档时间: | 
 | 
| 查看次数: | 4825 次 | 
| 最近记录: |