Книга: Основы программирования в Linux
Трассировка стека
Трассировка стека
Программа была остановлена при выполнении функции sort
в строке 23 исходного файла debug3.c. Если при компиляции вы не включили в программу дополнительную отладочную информацию (cc -g
), то не сможете увидеть, где программа дала сбой, и использовать имена переменных для просмотра данных.
Увидеть, как вы добрались до этого места, можно с помощью команды backtrace
:
(gdb) backtrace
#0 0x0804846f in sort (a=0x804a040, n=5) at debug3.c:23
#1 0x08048583 in main() at debug3.c:37
(gdb)
Это очень простая программа и трассировка у нее короткая, т.к. вы не вызывали много функций из других функций. Вы только видите, что sort
была вызвана из main
в строке 37 того же файла debug3.c. Обычно проблема гораздо сложнее, и команда backtrace
применяется для определения маршрута, который привел к месту ошибки. Эта информация очень полезна при отладке функций, вызываемых из множества разных мест.
У команды backtrace
есть сокращенная форма bt
и для совместимости с другими отладчиками есть команда where
, выполняющая ту же функцию.
- 9.2.1. Более строгая реализация стека
- Глобальное и локальное разворачивание стека
- Общие сведения о стеках протоколов
- Роль стека протоколов TCP
- 1.7.5. Многоуровневая архитектура стека TCP
- Просмотр стека вызовов
- Две или три вещи, которые мы знаем о стеках
- У9.3 Совместное использование стека достижимых элементов
- Трассировка
- Пример использования стека
- 11.1 ТРАССИРОВКА ПРОЦЕССОВ
- Пример 29-7. Трассировка переменной