setprop libc.debug.malloc = 1无效

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 !");
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢

fad*_*den 5

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.
Run Code Online (Sandbox Code Playgroud)

例如,如果您为上面的示例设置libc.debug.malloc = 10并添加了一个free()调用,您可能会收到来自库的警告消息,因为您设置的p[1]而不是p[0].