В приложении C ++ у меня есть 2 потока (thread1
и thread2
) из одного класса. Они работают очень быстро, и ничто не должно вызывать никаких блокирующих вызовов внутри l oop:
while (!end) {
//dostuff, no blocking!
}
cout << "ended" << endl;
В приложении есть какая-то ошибка, потому что когда я запускаю только один поток за раз и я установил его свойство end
, оно может успешно завершить работу с l oop.
Однако, если я запускаю оба потока, иногда один из потоков не может выйти из l oop (несмотря на то, что у него установлено end
свойство).
Сам l oop довольно большой (несколько сотен строк), я могу поставить в него (условную) точку останова, но когда я Шагаю, я теряю функциональность (так как поток должен работать быстро), поэтому, даже если я обнаружу, какие блоки строк, это может быть неправильный путь.
Итак, мой вопрос: есть ли опция в GDB для того, чтобы иметь точку останова, которая ведет себя как сторожевой пес? То есть: он должен прервать поток, если в течение определенного времени он не будет обработан, поэтому я могу проверить, какая строка вызывает проблему.