使用 valgrind 运行 iOS 4.2 应用程序时遇到问题。
我从 Macports 安装了 valgrind 3.6.0-SVN。 Xcode 3.2.5。
当我修改 main() 以运行 valgrind 时,我得到以下输出:
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
open$UNIX2003 called from function _vgrZU_libSystemZdZaZddylib_arc4random in image vgpreload_core-x86-darwin.so.
If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.
==99640==
==99640== Process terminating with default action of signal 6 (SIGABRT)
==99640== at 0x8B5DEF6: __kill (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8BF062C: raise (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8C066E3: abort (in /usr/lib/libSystem.B.dylib)
==99640== by 0x33F2547: __springboard_unimplemented (in /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libSystem.dylib)
==99640== by 0x33FC208: open$UNIX2003 (in /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libSystem.dylib)
==99640== by 0x1AAD6F3: arc4random (vg_preloaded.c:163)
==99640== by 0x8AFFB7E: create_scalable_zone (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8AFF7EA: _malloc_initialize (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8B23449: malloc_create_zone (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8B233F8: _dispatch_ccache_init (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8B21E0D: dispatch_once_f (in /usr/lib/libSystem.B.dylib)
==99640== by 0x8B233D3: _dispatch_continuation_alloc_from_heap (in /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 工作的因素......你的里程可能会有所不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)