使用 valgrind 运行 iOS 4.2 应用程序时遇到问题。
我从 Macports 安装了 valgrind 3.6.0-SVN。 XCode 3.2.5。
当我修改 main() 以运行 valgrind 时,我得到以下输出:
检测到尝试调用 iPhone 上不存在的系统库中的符号:
open$UNIX2003 从图像 vgpreload_core-x86-darwin.so 中的函数 _vgrZU_libSystemZdZaZddylib_arc4random 调用。
如果您在 gdb 中运行模拟器二进制文件时遇到此问题,请确保先“设置 start-with-shell off”。
==99640==
==99640== 进程以信号 6 (SIGABRT) 的默认操作终止
==99640== 在 0x8B5DEF6:__kill(在/usr/lib/libSystem.B.dylib 中)
==99640== 来自 0x8BF062C:raise(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8C066E3:中止(在/usr/lib/libSystem.B.dylib 中)
==99640== by 0x33F2547:__springboard_unimplemented(在/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libSystem.dylib)
==99640== by 0x33FC208: open$UNIX2003 (在/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libSystem.dylib)
==99640== 由 0x1AAD6F3:arc4random (vg_preloaded.c:163)
==99640== 由 0x8AFFB7E:create_scalable_zone(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8AFF7EA:_malloc_initialize(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8B23449:malloc_create_zone(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8B233F8 提供:_dispatch_ccache_init(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8B21E0D 提供:dispatch_once_f(在/usr/lib/libSystem.B.dylib 中)
==99640== 由 0x8B233D3:_dispatch_continuation_alloc_from_heap(在/usr/lib/libSystem.B.dylib 中)
错误似乎很明显。我怎样才能解决这个问题?我听说过在 SDK 3.x 上运行 valgrind 的成功尝试。发生了什么变化?
还有什么建议吗?
最佳答案
这是一个可怕的黑客,我不知道有什么影响......但它确实解决了问题:
在您的 valgrind 源代码中,打开 vg_preloaded.c 并找到第 163 行(在您的堆栈跟踪中引用)。将那里的代码更改为:
/* if (rnd < 0) rnd = open("/dev/random", O_RDONLY);
read(rnd, &result, sizeof(result)); */
result = random();
这似乎是使 valgrind 无法正常工作的唯一原因……您的里程可能会有所不同。
关于objective-c - valgrind 和 iOS SDK 4.2?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4599462/