Программа C ++ неожиданно прекращает, как я могу отладить это с GDB?

StackOverflow https://stackoverflow.com/questions/3830853

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top