2009-08-05 14 views
2

Xcodeで条件付きブレークポイントを追加するにはどうすればよいですか? 私はバイトが0Xcodeで条件付きブレークポイントを追加する方法

ときだから私は追加壊したくブレークポイントを設定してみてください、次に「編集ブレークポイント」

に行くには、条件で「== 0バイト」、それが壊れることはありません。

そして私は私の条件として '(0バイト==')しようと、GDBのクラッシュ:Xcodeのからの条件付きブレークポイントを使用して

 

bool SharedMemory::Map(size_t bytes) { 
    if (mapped_file_ == -1) 
    return false; 

    cout 


gdb stack crawl at point of internal error: 
[ 0 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (align_down+0x0) [0x122300] 
[ 1 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (wrap_here+0x0) [0x1225f8] 
[ 2 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (prepare_threads_before_run+0x270) [0x185320] 
[ 3 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (macosx_child_resume+0x263) [0x17e85d] 
[ 4 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (resume+0x323) [0x6973d] 
[ 5 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (keep_going+0x122) [0x69a01] 
[ 6 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (handle_inferior_event+0x3338) [0x6cd4a] 
[ 7 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (fetch_inferior_event+0x125) [0x6cfa8] 
[ 8 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (inferior_event_handler+0xd0) [0x8216c] 
[ 9 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (handle_file_event+0x159) [0x80055] 
[ 10 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (process_event+0x81) [0x7fc22] 
[ 11 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (gdb_do_one_event+0x46a) [0x80ae5] 
LEAK: 918 RenderObject 
LEAK: 1 Page 
LEAK: 3 Frame 
LEAK: 7 SubresourceLoader 
LEAK: 95 CachedResource 
LEAK: 2000 WebCoreNode 
[ 12 ] /Developer/usr/libexec/gdb/gdb-i386-apple-darwin (catch_errors+0x4d) [0x7abe2] 
/SourceCache/gdb/gdb-966/src/gdb/macosx/macosx-nat-infthread.c:321: internal-error: assertion failure in function "prepare_threads_before_run": tp != NULL 

A problem internal to GDB has been detected, 
further debugging may prove unreliable. 

The Debugger has exited with status 1.The Debugger has exited with status 1. 

答えて

6

GDBは少し凝り性です。私はのNSLog文の時に通常のブレークポイントを置くところ

if (bytes == 0) { 
    NSLog(@"here"); 
} 

:私は、多くの場合、自分が条件付きブレークポイントが備わっていますeschewingと同じようにコードを追加見つけます。

+0

これはまさに私がしていることです。 – Neil

1

したがって、条件に 'bytes == 0'を追加しますが、決して破損しません。

これは、バイトが決して0ではないからでしょうか?

ブレークポイントの直前でバイトを0に設定して、バイトが0であることを確認しましたか?

Iは

int bytes = 0; 
// Breakpoint here 

を試み、私は状態バイト== 1であった場合、ブレークポイントは、私は状態バイト== 0であったときに停止ではなく。

だから、私はあなたのケースでバイトと仮定しなければならない理由です私はNSAssertマクロを示唆して0

1

ことはありません。 これは広く使用されており、条件付きブレークの標準的な方法です。 例として、このコードはバイトのコード実行を中止します。

NSAssert(bytes!=0,@"here"); 

注意してください前の状態は通過条件です。

デフォルトのXcodeプロジェクト設定を使用している場合、アサーションコードはDebugビルド時のみコンパイルされます。それらはリリースビルドでクリアされます。条件付きコンパイルの詳細については、Xcodeプロジェクト設定エントリその他のCフラグおよびNS_BLOCK_ASSERTIONSについて調べてください。 (-DNS_BLOCK_ASSERTIONS-Dはコンパイラフラグ

関連する問題