2011-01-04 13 views
4

valgrindでiOS 4.2アプリを実行する際に問題が発生しました。valgrindとiOS SDK 4.2?

私はMacportsからvalgrind 3.6.0-SVNをインストールしました。 XCode 3.2.5。 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を見つける(:

+0

私は同じ問題を経験しています。まだ解決策はありません。 –

答えて

4

これは恐ろしいハックです、と私は意味合いが何であるか分からない...しかし、それは問題を解決しましたあなたのスタックトレースがあります)。

これはvalgrindが機能しないようにするための唯一の方法です...マイレージが異なる場合があります。

+0

それを愛して、何らかの理由でvalgrindソースをハックすることさえなかった。ありがとう。 – EightyEight

+0

私はそれが私を恐れ、恐ろしく汚いハックです。私はそれが実際の乱数を必要としているかどうか分かりません。しかし、それは起動し、私に有用な情報を与えたので、それはすべて悪いことではありません:) –

+1

これをrandom()の呼び出しで置き換えるのではなく、 'Darwin arc4random(rdar:// 6166275) 'コメントまで、'#else'は含めません。 – adurdin

2

は、あなたのObjective-Cファイルのいずれかの先頭に次の行を追加します。

 
#import "stdio.h" 
#import "fcntl.h" 

int open$UNIX2003(const char *pathname, int flags, mode_t mode) { 
    return open(pathname, flags, mode); 
} 

int read$UNIX2003(int fildes, void *buf, size_t nbyte) { 
    return read(fildes, buf, nbyte); 
} 

int close$UNIX2003(int fildes) { 
    return close(fildes); 
} 
関連する問題