libmemunreachable+malloc debug分析内存泄露

目录

使用lsan遇到困难

使用libmemunreachable+mallocdebug分析

原理

打开malloc debug

dumpsys media.camera

Backtrace


使用lsan遇到困难

一般使用lsan来查memleak效率最高,不过针对cameraserver hook到asan库时有一些其他的报错。

 而且报错看起来还不太好解决:

看下如何针对camerasever使能lsan,后续研究。

使用libmemunreachable+mallocdebug分析

原理

相关的原理可以参考官方说明:

https://cs.android.com/android/platform/superproject/+/master:system/memory/libmemunreachable/?q=libmemunreachable

据说到Android U(?)以后,还可以官方支持设置backtrace size,高级高级:

Starting with Android U, new malloc debug options have been added that allow specific sized allocation to be backtraced. The three new options are:

  • backtrace_size
  • backtrace_min_size
  • backtrace_max_size

打开malloc debug

adb root

adb remount

adb shell setenforce 0

adb shell setprop libc.debug.malloc.program cameraserver

adb shell setprop libc.debug.malloc.options "\"backtrace\""

adb shell stop cameraserver

adb shell start cameraserver

dumpsys media.camera

使用命令adb shell dumpsys media.camera --unreachable

如果没有打开malloc debug的话,只能看到leak的size,没有backtrace:

打开malloc debug的话,就可以看到backtrace:

 有backtrace的话就很好分析了。

Backtrace

wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libexif.so 0000000000010d28
exif_data_alloc
external/libexif/libexif/exif-data.c:74
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libexif.so 000000000000f614
exif_data_load_data_content
external/libexif/libexif/exif-data.c:444
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libexif.so 000000000000f168
exif_data_load_data
external/libexif/libexif/exif-data.c:912 (discriminator 2)
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libexif.so 000000000000edd4
exif_data_new_from_data
external/libexif/libexif/exif-data.c:152
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libcameraservice.so 000000000027c3dc
android::camera3::ExifUtilsImpl::initialize(unsigned char const*, unsigned long)
frameworks/av/services/camera/libcameraservice/utils/ExifUtils.cpp:312
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libcameraservice.so 00000000001baefc
android::camera3::HeicCompositeStream::processAppSegment(long, android::camera3::HeicCompositeStream::InputFrame&)
frameworks/av/services/camera/libcameraservice/api2/HeicCompositeStream.cpp:985 (discriminator 4)
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libcameraservice.so 00000000001b9f58
android::camera3::HeicCompositeStream::processInputFrame(long, android::camera3::HeicCompositeStream::InputFrame&)
frameworks/av/services/camera/libcameraservice/api2/HeicCompositeStream.cpp:881 (discriminator 4)
wj@wj:~/SSD_1T/M2_code/prebuilts/clang/host/linux-x86/llvm-binutils-stable$ ./llvm-addr2line -Cfe ~/下载/nuwa_pre_symbols_1009.001_13.0_e8db6882b9_ssi/out/target/product/missi/symbols/system/lib64/libcameraservice.so 00000000001b7240
android::camera3::HeicCompositeStream::threadLoop()
frameworks/av/services/camera/libcameraservice/api2/HeicCompositeStream.cpp:1754 (discriminator 6)

根据backtarce解决 memleak 问题。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

repinkply

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值