微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在“adb dumpsys meminfo --unreachable”的输出中用源代码行号替换函数偏移量

如何解决在“adb dumpsys meminfo --unreachable”的输出中用源代码行号替换函数偏移量

要查找我的应用程序的本机 C 代码的内存泄漏,我运行以下命令

adb shell dumpsys meminfo --unreachable $(adb shell pidof com.mycompany.myapp)

我得到以下输出

6 bytes unreachable at ee1551b0
   and 654 similar unreachable bytes in 109 allocations
   contents:
   ee1551b0: 31 2e 30 2e 30 00                               1.0.0.
          #00  pc 000421e4  /apex/com.android.runtime/lib/bionic/libc.so (malloc +68)
          #01  pc 00126670  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction7 +80)
          #02  pc 0011d2b9  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so
          #03  pc 0011d025  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction6 +165)
          #04  pc 0011e82c  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction5 +892)
          #05  pc 00120ea7  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so
          #06  pc 0012091c  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so
          #07  pc 00120144  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so
          #08  pc 0011eebe  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so
          #09  pc 0011e6d4  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction4 +548)
          #10  pc 00121924  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction3 +68)
          #11  pc 00121743  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction2 +99)
          #12  pc 001221c9  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (myCfunction1 +409)
          #13  pc 00121f4d  /data/app/~~XX==/com.mycompany.myapp-W6-xx==/lib/x86/mylib.so (Java_com_mycompany_myapp_myjavaclass_myjavamethod +333)

我正在寻找一种用源代码的行号替换偏移函数(+333、+409、+99...)的简单方法。 我通过在墓碑文件上使用 ndk-stack 来做这种事情。也许有一个工具能够破译'dumpsys meminfo --unreachable'的输出

解决方法

我找到了一个简单的解决方案。 我将调试器附加到进程,设置断点并移动到 android studio 的 lldb 控制台。 要将断点设置为函数后的给定偏移量,我输入此处给出的命令 https://stackoverflow.com/a/23250892/9459302

例如 b -a (void*()(void,size_t)) myCfunction1 +400

其中 (void*(*)(void*,size_t)) 是 myCfunction1 的原型

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。