android 5/L 上的 Valgrind 崩溃

Posted

技术标签:

【中文标题】android 5/L 上的 Valgrind 崩溃【英文标题】:Valgrind on android 5/L crashes 【发布时间】:2014-12-25 02:45:36 【问题描述】:

我已经使用 NDK R10b 为 android 目标 eabi x86 交叉编译了 Valgrind。 当按步骤启动我的应用程序时,例如here valgrind 崩溃。 日志

10-29 11:16:07.468: D/AndroidRuntime(2240): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
10-29 11:16:07.469: D/AndroidRuntime(2240): CheckJNI is ON
10-29 11:16:07.486: E/memtrack(2240): Couldn't load memtrack module (No such file or directory)
10-29 11:16:07.486: E/android.os.Debug(2240): failed to load memtrack module: -2
10-29 11:16:07.500: D/AndroidRuntime(2240): Calling main entry com.android.commands.am.Am
10-29 11:16:07.502: I/ActivityManager(1236): START u0 act=android.intent.action.MAIN flg=0x10000000 cmp=... from uid 0 on display 0
10-29 11:16:07.518: D/AndroidRuntime(2240): Shutting down VM
10-29 11:16:07.519: I/art(2240): Debugger is no longer active
10-29 11:16:07.522: E/libprocessgroup(2250): failed to make and chown /acct/uid_10053: Read-only file system
10-29 11:16:07.522: W/Zygote(2250): createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
10-29 11:16:07.523: I/art(2250): Not late-enabling -Xcheck:jni (already on)
10-29 11:16:07.524: E/art(2240): Thread attaching while runtime is shutting down: Binder_1
10-29 11:16:07.524: I/AndroidRuntime(2240): NOTE: attach of thread 'Binder_1' failed
10-29 11:16:09.746: D/AndroidRuntime(2264): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
10-29 11:16:09.848: D/AndroidRuntime(2264): CheckJNI is ON
10-29 11:16:10.278: I/art(2264): Counter: 1
10-29 11:16:10.318: I/start-valgrind.sh(2263): No [stack] line found in /proc/self/maps!
10-29 11:16:10.321: A/libc(2264): No [stack] line found in /proc/self/maps!
10-29 11:16:10.341: A/libc(2264): Fatal signal 6 (SIGABRT), code -6 in tid 2264 (...)
10-29 11:16:10.580: I/DEBUG(948): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-29 11:16:10.580: I/DEBUG(948): Build fingerprint: 'generic_x86/sdk_phone_x86/generic_x86:5.0/LRX09D/1504858:eng/test-keys'
10-29 11:16:10.580: I/DEBUG(948): Revision: '0'
10-29 11:16:10.580: I/DEBUG(948): ABI: 'x86'
10-29 11:16:10.580: I/DEBUG(948): pid: 2264, tid: 2264, name: ...  >>> /data/local/Inst/bin/valgrind <<<
10-29 11:16:10.580: I/DEBUG(948): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
10-29 11:16:10.581: I/DEBUG(948): Abort message: 'No [stack] line found in /proc/self/maps!'
10-29 11:16:10.581: I/DEBUG(948):     eax 00000000  ebx 000008d8  ecx 00000006  edx 00000000
10-29 11:16:10.581: I/DEBUG(948):     esi 00000000  edi 00000000
10-29 11:16:10.581: I/DEBUG(948):     xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000  xss 0000007b
10-29 11:16:10.581: I/DEBUG(948):     eip 3806dd52  ebp 00000000  esp 628cfe40  flags 00200202
10-29 11:16:10.581: I/DEBUG(948): backtrace:
10-29 11:16:10.581: I/DEBUG(948):     #00 pc 0006dd52  /data/local/Inst/lib/valgrind/memcheck-x86-linux
10-29 11:16:10.583: W/NativeCrashListener(1236): Couldn't find ProcessRecord for pid 2264
10-29 11:16:10.597: I/DEBUG(948): Tombstone written to: /data/tombstones/tombstone_09
10-29 11:16:10.597: I/BootReceiver(1236): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE)
10-29 11:16:10.637: I/start-valgrind.sh(2263): start-valgrind.sh terminated by exit(1)
10-29 11:16:10.638: I/Zygote(954): Process 2250 exited cleanly (1)
10-29 11:16:10.639: W/Zygote(954): Error reading pid from wrapped process, child may have died
10-29 11:16:10.639: W/Zygote(954): java.io.EOFException
10-29 11:16:10.639: W/Zygote(954): 	at libcore.io.Streams.readFully(Streams.java:83)
10-29 11:16:10.639: W/Zygote(954): 	at java.io.DataInputStream.readInt(DataInputStream.java:103)
10-29 11:16:10.639: W/Zygote(954): 	at com.android.internal.os.ZygoteConnection.handleParentProc(ZygoteConnection.java:974)
10-29 11:16:10.639: W/Zygote(954): 	at com.android.internal.os.ZygoteConnection.runOnce(ZygoteConnection.java:276)
10-29 11:16:10.639: W/Zygote(954): 	at com.android.internal.os.ZygoteInit.runSelectLoop(ZygoteInit.java:784)
10-29 11:16:10.639: W/Zygote(954): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:690)
10-29 11:16:10.639: W/ActivityManager(1236): Slow operation: 3129ms so far, now at startProcess: returned from zygote!
10-29 11:16:10.639: W/ActivityManager(1236): Slow operation: 3129ms so far, now at startProcess: done updating battery stats
10-29 11:16:10.639: W/ActivityManager(1236): Slow operation: 3129ms so far, now at startProcess: building log message
10-29 11:16:10.639: I/ActivityManager(1236): Start proc ... for activity ...: pid=2250 uid=10053 gids=50053, 9997, 3003, 1028, 1015 abi=x86
10-29 11:16:10.640: W/ActivityManager(1236): Slow operation: 3129ms so far, now at startProcess: starting to update pids map
10-29 11:16:10.640: W/ActivityManager(1236): Slow operation: 3130ms so far, now at startProcess: done updating pids map
10-29 11:16:10.640: W/ActivityManager(1236): Slow operation: 3130ms so far, now at startProcess: done starting proc!
10-29 11:16:17.520: W/ActivityManager(1236): Launch timeout has expired, giving up wake lock!
10-29 11:16:20.650: W/ActivityManager(1236): Process ProcessRecord1daddf3b 2250:.../u0a53 failed to attach
10-29 11:16:20.650: I/ActivityManager(1236): Killing 2250:.../u0a53 (adj -100): start timeout
    这也发生在我的 Android 5/L ARM 模拟器上 我使用的是 ubuntu 14 手动 valgrind 启动,例如 /data/local/Inst/bin/valgrind /data/local/sample-bin 没有问题 在模拟器 API 18 (ARM) 上使用相同的 Valgrind 编译运行良好 我尝试在允许写入的模式下使用重新挂载文件系统 adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /systemmount -o ro,remount /systemadb root &amp;&amp; adb remount -- 没有一个能解决问题

有没有人知道这里可能是什么问题?

【问题讨论】:

No [stack] line found in /proc/self/maps! 错误呢?你找到解决办法了吗? 【参考方案1】:

我在模拟器的 Widget Preview 应用中遇到了类似的错误:

E/libprocessgroup﹕ failed to make and chown /acct/uid_10052: Read-only file system

经过各种网络搜索和实验,我发现模拟器的/sdcard确实设置为只读。 (您可以尝试在 adb shell 中触摸或推送文件,或使用 Android 设备管理器探索文件系统来测试。)

Issue 78434 中描述了有效的错误和解决方法。

解决方法

转到 .android 文件夹中的 ADV 文件夹并找到 AVD 的 config.ini 文件,例如~/.android/avd/Nexus5_v19.avd/config.ini。 用文本编辑器打开它。如果您使用的是 Windows,请使用可以处理 Unix 换行符的文本编辑器。 将hw.sdCard=no 更改为hw.sdCard=yes。 保存,重新启动模拟器,并测试 /sdcard 是否可写。

【讨论】:

一直设置为yes。它没有改变任何东西。 有时即使使用hw.sdCard=yes,模拟的 sdcard 也是不可写的。当你测试写入它时会发生什么,例如adb shell 然后cd /sdcard &amp;&amp; touch foo.txt?有时我还必须使用 AVD 管理器为 AVD 创建一个新的模拟 sdcard,然后再次检查hw.sdCard=yes,然后它是可写的。无论哪种方式,这可能不是您问题的(唯一)原因。【参考方案2】:

好的,我遇到了同样的问题,上面的解决方案对我不起作用。在我将 Firebase Storage 添加到我的应用程序之后,我发现了它。 检查build.gradle(Module:app),发现Firebase不同版本冲突,将它们全部更改为相同版本,同步项目,现在可以工作了:)希望对将来的参考有所帮助。

【讨论】:

以上是关于android 5/L 上的 Valgrind 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

[转]Windows上的valgrind--deleaker

Valgrind 上的内存堆和泄漏总结

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

valgrind 抱怨 C++ 结构上的未初始化字节

ubuntu上的静态链接pthread导致未初始化的值跳转(valgrind)[重复]

Valgrind无法在Android OS上执行memcheck工具?