У меня есть большое приложение на C++, которое воспроизводимо зависает в определенный момент. Это не сбой, нет сегфолта. У меня есть доступ к исходному коду, но я не автор. Поэтому я не могу сделать обоснованное предположение о том, что происходит.
Я попытался использовать GDB для его отладки. Проблема, однако, в том, что когда я нажимаю точку останова, приложение зависает. Когда я перехожу, приложение также кажется зависшим. Таким образом, я не могу точно определить, нашел ли я проблему или приложение просто кажется зависшим, потому что выполнение приостановлено в отладчике.
Боюсь, что лучше всего будет вернуться к старой доброй отладке cout. Есть ли другие варианты?
🤔 А знаете ли вы, что...
C++ обладает возможностью шаблонного программирования, что позволяет создавать обобщенные алгоритмы и структуры данных.
Возможно, он «заморожен», потому что вы вызвали функцию, ожидающую ввода. Если вы пропустите такую функцию, отладчик не остановится до тех пор, пока функция не вернется (возможно, предоставив необходимые входные данные).
Альтернативно вы перешли через невозвратную функцию, потому что сама функция неверна или ей были предоставлены неправильные параметры.
В любом случае, подходящей стратегией будет запуск программы до тех пор, пока она не станет «зависшей», а затем остановка программы, чтобы определить, где она зависла. Вероятно, это код какой-то библиотеки, исходный код которого недоступен. В этом случае вам следует проверить стек вызовов, чтобы определить, как он попал туда, где он находится, и, в частности, отследить вызов, который явно принадлежал вашему коду.
В GDB ctrl+c остановит запущенный процесс. Команда where
выведет стек вызовов.