Как добавить условную точку останова в Xcode - PullRequest
2 голосов
/ 05 августа 2009

Как добавить условную точку останова в 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 ]

6 голосов
/ 05 августа 2009

GDB с использованием условных точек останова из xcode немного привередлив. Я часто отказываюсь от условной функции точек останова и просто добавляю код вроде:

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

Я бы поставил нормальную точку останова в операторе NSLog.

1 голос
/ 23 октября 2010

Я предлагаю NSAssert макрос. Это широко используемый и стандартный способ условного разрыва. В качестве примера, этот код прерывает выполнение кода, байт равен нулю.

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

Позаботьтесь о том, чтобы предшествующее состояние прошло. (не условие отказа)

Если вы используете конфигурацию проекта Xcode по умолчанию, код подтверждения компилируется только в отладочной сборке. Они будут очищены в Release build. Для получения дополнительной информации об условной компиляции, копайте о записи настройки проекта Xcode Другие флаги C и NS_BLOCK_ASSERTIONS. (* 1 010 *) -D - флаг компилятора

1 голос
/ 06 сентября 2010

Поэтому я добавляю 'bytes == 0' в условие, но оно никогда не прерывается.

Ну, может быть, это потому, что байты никогда не равны 0?

Вы пытались установить байты в 0 прямо перед точкой останова, чтобы убедиться, что байты равны 0?

Я пытался

int bytes = 0;
// Breakpoint here

и точка останова остановилась, когда у меня были байты условия == 0, но не тогда, когда у меня были байты условия == 1.

Так вот почему я должен предположить, что в вашем случае байты никогда не равны 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...