Ловля выхода из выхода в Xcode - PullRequest
1 голос
/ 11 марта 2011

Я пытаюсь разрешить очень неприятный Heisenbug в Xcode, где у меня есть поток, который выполняет некоторую фоновую обработку, вызывая внешнюю библиотеку, и в какой-то момент кажется, что поток просто исчезает.Код выглядит примерно так:

LOG("starting operation");
float progress=0;
while (progress < 1.0f) {
  LOG("start loop");
  Wait(100); // calls ::Delay()
  progress=otherLibrary->CheckProgress();
  LOG("end loop");
}

В моем лог-файле я получаю вывод, подобный следующему:

starting operation
start loop
end loop
starting operation
start loop

Похоже, что цикл просто как-то взрывается.Он не зависает, как будто я врываюсь в отладчик, этот поток больше не существует.Если я добавлю дополнительные функции ведения журнала или переместлю их, в некоторых местах произойдет сбой.В некоторых случаях это даже кажется бомбить внутри функции Delay() системы.

Вопрос: как я могу определить точку, в которой прерывается этот поток?

Не выдается никаких исключений, ничего в консоли (gdb или system).ГБД ловко говорит мне, что Catch of thread_exit not yet implemented.Сборка отладки не воспроизводит это поведение (о радость), как и мое минимальное тестовое приложение.Я удалил код регистрации на случай, если это вызывает некоторые странные эффекты синхронизации, но это не помогает.

1 Ответ

4 голосов
/ 11 марта 2011

Установить точку останова в _pthread_exit.

  1. В меню Xcodes выберите «Выполнить» -> «Показать» -> «Точки останова»
  2. Дважды щелкните последнюю строку в таблице точек останова.
  3. Введите "_pthread_exit".

Вы также можете установить точку останова в pthread_cancel.

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