Как сбрасывать весь сеанс GDB в файл, включая команды, которые я печатаю и их вывод?
В bash я могу использовать команду script
, которая сбрасывает все, что отображается в оболочке, в файл, включая:
- команды напечатаны
- линия PS1
- stdout и stderr команд
Что такое эквивалент в gdb?
Я попытался запустить shell script
изнутри GDB, но после того, как я нажал return, я был в оболочке и потерял приглашение оболочки и больше не мог запускать команду. Более того, я не мог использовать ctrl + c или ctrl +\для выхода. Мне нужно было заставить убить /bin/login tty2
для выхода.
Ответы
Ответ 1
Если вы хотите записать вывод GDB, вы можете использовать команды вывода журнала GDB, например.
set logging file mylog.txt
set logging on
Если вы хотите перенаправить вывод своей программы в файл, вы можете использовать перенаправление, например.
run myprog > mylog.txt
см. главу о программе IO в руководстве GDB для получения дополнительной информации
Ответ 2
- Создайте текстовый файл, т.е.
gdbCommands.txt
, со следующими командами
set logging on my_log_file\nbt 10\nq
bt 10
, указывает количество строк (вызовов функций), которые нам нужны из backtrace, в нашем примере - 10 строк.
- Выполнение gdb с использованием следующей команды, предполагающей основной файл дампа core.2345
gdb -x gdbCommands.txt myApp core.2345
- Откройте
my_log_file
и проверьте обратную линию!
howto-redirect-gdb-backtrace-output-to-a-text-file
Ответ 3
Взгляните на документацию GDB. Найдите "Консервированные последовательности команд". Существует способ сохранить команды GDB в файле и запустить их с помощью команды source
, и вы можете использовать некоторые команды GDB в этих сценариях для печати информации, доступной для GDB (например, echo
, output
и printf
)).
Если вы хотите получить этот файл в файле, используйте set logging file FILE
.