2009-08-05 53 views
2

如何在Xcode中添加条件断点? 我尝试设置一个断点,然后进入“编辑断点”如何在Xcode中添加条件断点

我想休息的时候字节为0

所以我的状态添加“字节== 0”,但它从来没有打破。

然后我尝试 '(字节== 0)' 作为我的病情,gdb的崩溃:

 

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使用条件断点从Xcode是有点挑剔。我经常发现自己避开的条件断点功能,只添加如下代码:

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

我把一个普通的断点在NSLog的声明。

+0

是的,这正是我所做的。 – Neil 2009-08-05 04:22:36

1

因此,我在条件中添加'字节== 0',但它从不中断。

那么,也许这是因为字节从来没有0?

您是否尝试在断点之前将字节设置为0,以确保字节为0?

我试图

int bytes = 0; 
// Breakpoint here 

,当我有状态字节== 0断点停止,但不是当我有状态字节== 1。

所以这就是为什么我要假设你的情况是字节0从不

1

我建议NSAssert宏。 这是被广泛使用的,并且是条件中断的标准方式。 作为一个例子,这段代码中止字节的代码执行为零。

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

注意前面的条件是通过条件。 (不是失败的情况)

如果您使用默认的Xcode项目配置,则仅在Debug版本中编译断言代码。它们将在Release版本中清除。有关条件编译的更多信息,请查阅Xcode项目设置条目其他C标志NS_BLOCK_ASSERTIONS。 (-DNS_BLOCK_ASSERTIONS-D是编译器标记