gpt4 book ai didi

android - setprop libc.debug.malloc = 1 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:29 25 4
gpt4 key购买 nike

我尝试使用 setprop libc.debug.malloc = 1 来找出泄漏。我制作了一个演示程序并在其中引入了内存泄漏,但上面的标志无法检测到此泄漏。我尝试了以下命令:adb shell setprop libc.debug.malloc 1亚行外壳停止adb shell 启动

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。它跟踪 native 堆分配,但并不真正直接检测泄漏。它与 DDMS 结合使用效果最佳;见this answer有关使用它进行 native 泄漏追踪的信息(可能还有 this older answer )。

(请注意,您可以在最新版本的 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]

关于android - setprop libc.debug.malloc = 1 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com