Я пытаюсь разрешить очень неприятный 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
.Сборка отладки не воспроизводит это поведение (о радость), как и мое минимальное тестовое приложение.Я удалил код регистрации на случай, если это вызывает некоторые странные эффекты синхронизации, но это не помогает.