Программа C ++ неожиданно завершает работу, как мне отладить это с помощью gdb? - PullRequest
1 голос
/ 30 сентября 2010

Я пишу программу, которая запускает некоторые модульные тесты для кода, написанного моими коллегами.Я использую Google C ++ среду тестирования .Я запускаю функцию, которая порождает 3 потока, а затем работает в течение 30 секунд.После запуска программа выходит со статусом 0. Очевидно, это не ожидаемое поведение.Я знаю, что это не делает это дальше, потому что я помещаю выражение cout в следующую прямую строку.

Мой вопрос: как лучше всего отладить это с помощью gdb?Это сложно, потому что программа не работает с ошибками или что-то в этом роде, она просто завершается.Есть ли способ перехватить выходной вызов, а затем получить длинную обратную трассировку?

Спасибо за помощь.

Редактировать:

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;

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

Помимо break exit, есть пара других мест, где вам может потребоваться установить точки останова. Посмотрите на этот вопрос и ответы .

2 голосов
/ 30 сентября 2010

Простая команда break exit в gdb должна остановить программу и позволить вам проверить состояние, когда программа вызывает exit из любого потока.

Это, конечно, при условии, что программа заканчивается сexit вызывается, а не по какой-либо другой причине, такой как abort, ошибка подтверждения, необработанное исключение или возврат из основного.

...