Программа C ++ неожиданно прекращает, как я могу отладить это с GDB?
-
26-09-2019 - |
Вопрос
Я пишу программу, которая управляет некоторыми модульными тестами на код, который был написан моим коллегами. Я использую Основная структура тестирования Google C ++. Отказ Я запускаю функцию, которая порождает 3 потока, а затем запускается в течение 30 секунд. После того, как он работает, программа выходит с статусом 0. Это не ожидаемое поведение, очевидно. Я знаю, что это не делает его дальше, потому что я положил выступление Cout в следующей непосредственной близости.
Мой вопрос в том, что лучший способ пойти на отладку этого с GDB? Это сложно, потому что программа не будет SegFault или что-то подобное, это просто выходит. Есть ли способ подключить выезд, а затем получить длинную задницу?
Спасибо за помощь.
Редактировать:
cSystemCfg* pSystemCfg = new cSystemCfg();
std::cout << "Before runThing" << std::endl;
pSomething->runThing(&acq, pHwIf, pSystemCfg, pIf);
//Exits here, never gets to the next line
std::cout << "After runThing" << std::endl;
Решение
Кроме break exit
, есть пара других мест, где вам может потребоваться установить точки останова. Взгляни на Этот вопрос и ответы.
Другие советы
Просто break exit
Команда в GDB должна остановить программу и позволить вам изучить состояние, когда программа вызывает exit
из любой нити.
Это, конечно, предполагает, что программа заканчивается от exit
называться, а не по какой-то другой причине, например abort
, отказ от утверждения, необработанное исключение или возвращение от основных.