Nano Hash - криптовалюты, майнинг, программирование

перенаправить вывод в файл из gdb

В настоящее время я печатаю содержимое переменной из gdb следующим образом:

(gdb) call printf("%s",buffer)

Буфер содержит большую строку, и я хочу перенаправить ее в файл, а не на экран. Включение функции logging в gdb здесь не поможет. И я также не могу использовать команду > для перенаправления. Конечно, я могу создать файл в программе и записать буфер в этот файл и вызвать запись в файл через gdb. Но есть ли более легкий выход?

20.05.2014

Ответы:


1

Это перенаправит целевой стандартный вывод в файл по вашему выбору, вызовет printf, а затем восстановит стандартный вывод до его предыдущей настройки. fflush вызывается непосредственно перед изменением файлового дескриптора, поэтому вывод отправляется в нужное место.

$ gdb f
...
(gdb) list
1   #include <stdlib.h>
2   #include <stdio.h>
3   #include <string.h>
4   
5   main()
6   {
7       char buf[] = "test";
8   
9       printf("%p  ", (void *)buf);
10      printf("%d\n", strlen(buf));
11  }
(gdb) break 10
Breakpoint 1 at 0x80484d3: file f.c, line 10.
(gdb) run
Starting program: f 
Breakpoint 1, main () at f.c:10
10      printf("%d\n", strlen(buf));
(gdb) call fflush(stdout)
0xbffff117  $1 = 0
(gdb) call dup(1)
$2 = 3
(gdb) call creat("/tmp/outputfile",0644)
$3 = 4
(gdb) call dup2(4,1)
$4 = 1
(gdb) call printf("%s\n", buf)
$5 = 5
(gdb) call fflush(stdout)
$6 = 0
(gdb) call dup2(3,1)
$7 = 1
(gdb) call close(3)
$8 = 0
(gdb) call close(4)
$9 = 0
(gdb) cont
Continuing.
4
[Inferior 1 (process 3214) exited with code 02]
(gdb) shell cat /tmp/outputfile
test
21.05.2014

2

Вы не можете использовать > или не знаете, как использовать его в gdb? Вы можете перенаправить вывод изнутри gdb. Пытаться:

(gdb) run > out.txt

(gdb) run > /dev/null

20.05.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..