如何在Xcode中添加条件断点? 我尝试设置断点,然后转到“编辑断点”
我希望在字节为0时中断。
所以我在条件中添加'bytes == 0',但它永远不会中断。
然后我尝试'(bytes == 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.
答案 0 :(得分:6)
使用xcode中的条件断点的GDB有点挑剔。我经常发现自己避开条件断点功能,只需添加如下代码:
if (bytes == 0) {
NSLog(@"here");
}
我在NSLog语句中放了一个普通的断点。
答案 1 :(得分:1)
所以我在条件中添加'bytes == 0',但它永远不会中断。
好吧,也许那是因为字节永远不是0?
您是否尝试在断点之前将字节设置为0,以确保字节为0?
我试过
int bytes = 0;
// Breakpoint here
并且当条件bytes == 0时断点停止,但是当条件bytes == 1时没有。
这就是为什么我必须假设在你的情况下字节永远不是0。
答案 2 :(得分:1)
我建议使用NSAssert
宏。
这被广泛使用,并且是条件中断的标准方式。
例如,此代码中止字节的代码执行为零。
NSAssert(bytes!=0,@"here");
注意先前的条件是通过条件。 (不是失败的条件)
如果您正在使用默认Xcode项目配置,则仅在Debug构建时编译断言代码。它们将在Release版本中清除。有关条件编译的更多信息,请了解Xcode项目设置条目其他C标志和NS_BLOCK_ASSERTIONS
。 (-DNS_BLOCK_ASSERTIONS
)
-D
是编译器标志