[redirect] Gdb는 stdout 대신 파일로 인쇄

나는 gdb를 실행 중이며 불행한 신 객체 중 하나를 조사하고 싶습니다. 전체 내용을 보려면 여러 페이지가 필요합니다 (24 인치 모니터를 옆으로 돌리고 있습니다!). 사용하기 쉽도록 gdb에서 개체를 화면 대신 파일로 인쇄하여 열 수 있도록하고 싶습니다. vi와 쉽게 이동할 수 있습니다. gdb의 다재다능 함으로이 작업을 수행 할 수있는 방법이 있어야합니다.



답변

로깅을 활성화해야합니다.

(gdb) set logging on

사용할 파일을 지정할 수 있습니다.

(gdb) set logging file my_god_object.log

그리고 현재 로깅 구성을 검토 할 수 있습니다.

(gdb) show logging


답변

run명령을 통해 gdb의 출력을 파일로 리디렉션 할 수 있음을 발견했습니다 .

(gdb) run > outfile


답변

@qubodup의 답변 확장

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

-ex스위치는 GDB 명령을 실행합니다. 따라서 위의 코드는 코어 파일을로드하고 bt명령을 실행 한 다음 quit명령 을 실행합니다. 출력은 backtrace.log화면에 기록됩니다 .

또 다른 유용한 gdb 호출 (모든 스레드의 로컬 변수로 스택 추적 제공)은 다음과 같습니다.

gdb core.3599 -ex 'thread apply all bt full' -ex quit


답변

에서 https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html :

gdb 명령의 출력을 파일에 저장할 수 있습니다. gdb의 로깅을 제어하는 ​​몇 가지 명령이 있습니다.

set logging on

로깅을 사용하도록 설정.

set logging off

로깅을 비활성화합니다.

set logging file file

현재 로그 파일의 이름을 변경합니다. 기본 로그 파일은 gdb.txt입니다.

set logging overwrite [on|off]

기본적으로 gdb는 로그 파일에 추가됩니다. 대신 로그 파일을 덮어 쓰도록 로그온을 설정하려면 덮어 쓰기를 설정합니다.

set logging redirect [on|off]

기본적으로 gdb 출력은 터미널과 로그 파일 모두로 이동합니다. 출력이 로그 파일로만 이동하도록하려면 리디렉션을 설정합니다.

show logging

로깅 설정의 현재 값을 표시합니다.


답변

출력을 보면서 (명령 작성을 용이하게하는) gdb를 파일에 기록하는 간단한 방법은 다음을 사용하는 것입니다 tee.

gdb command |& tee gdb.log


답변

여기에 좋은 답변이 많이 있지만 여전히 나를 위해 일한 유일한 것을 게시해야합니다.

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

이것은 gdb 바이너리 출력을 동일한 log.txt 파일로 가져 오는 유일한 방법 이며 콘솔에서도 볼 수 있습니다.

편집하다:

주의 : 출력은 gdb 출력과 바이너리 출력간에 부분적으로 동기화되지 않은 것 같습니다. 누군가 확인할 수 있습니까? telnet / ssh 클라이언트에 콘솔에 표시되는 출력을 기록하는 기능이 있는지 확인할 수 있습니다.


답변

여기에 여러 가지 답변이 있습니다. 그들은 정확합니다. 한 번에 모든 출력을 수집하는 데 도움이되는 명령을 추가하고 싶습니다. 이것은 거대한 역 추적을 수집 할 때 정말 유용합니다. 로깅 구성을 수행하기 전에 다음을 수행하십시오.

(gdb)set height 0

이 기사에서 찾았습니다 : https://askaralikhan.blogspot.com/2016/05/gdb-all-threads-bt-to-file.html?showComment=1584614942454#c4584028195226351332