2014-05-20 2 views
0

Я сейчас печатает содержимое переменной из GDB, как это:перенаправить вывод в файл с помощью GDB

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

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

ответ

1

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

(gdb) run > out.txt

(gdb) run > /dev/null

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 
Смежные вопросы