如何在Xcode中添加条件断点

时间:2009-08-05 03:53:55

标签: xcode gdb

如何在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.

3 个答案:

答案 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是编译器标志