대화식 디버깅 중 gdb 출력을 강조 표시하고 색상을 지정하는 방법은 무엇입니까?
나는 ddd, nemiver, emacs, vim 또는 다른 프론트 엔드를 사용해야한다고 대답하지 말고 gdb를 그대로 선호하지만 일부 터미널 색상으로 출력을보고 싶습니다.
.gdbinit
~/.gdbinit
색상을 가지도록 조정할 수 있습니다 . mammon을 .gdbinit
사용할 수 있습니다 :
https://github.com/gdbinit/gdbinit
원하는만큼 조정할 수도 있습니다. 나는 이 SO 답변 덕분에 이것을 발견했다 . 얻을 수있는 출력 종류는 다음과 같습니다.
GitHub 리포지토리도 사용할 수 있습니다 : https://github.com/gdbinit/Gdbinit
참고로, 동일한 아이디어가 lldb 에도 적용되었습니다 .
GDB 대시 보드
동일한 개념에 따라 GDB 대시 보드 는 Python에서 GDB를위한 모듈 식 시각적 인터페이스를 제공합니다.
(보이드) 워커
다른 유사한 프로젝트는 GDB의 Python 지원을 사용하여 더 많은 확장 성을 제공하므로 https://github.com/dholm/voidwalker를 확인 하십시오.
@dholm은 또한 이전 .gdbinit에서 영감을 얻은 .gdbinit를 제공합니다 .
pwndbg
일부 프로젝트는 개선 된 디스플레이를 포함하여 유용한 기능 세트를 제공합니다. PEDA 또는 pwndbg 의 경우입니다 . 후자는 다음과 같은 설명을 제공합니다.
PEDA 대체품. 우리의 좋은 친구의 정신
windbg
,pwndbg
발음된다pwnd-bag
.
- 속도
- 복원력
- 깨끗한 코드
PEDA와 유사한 디버깅 및 개발 개발을 지원하는 명령을 제공하며 더 나은 표시가 가능합니다 (프로젝트의 주요 초점은 아니지만). 소프트웨어가 아직 개발 중이며 아직 제대로 릴리스되지 않았습니다.
볼트론
프로젝트 설명 상태 :
Voltron은 해커를위한 확장 가능한 디버거 UI입니다. 다른 터미널에서 실행되는 유틸리티 뷰를 디버거 (LLDB 또는 GDB)에 연결하여 디스 어셈블리, 스택 내용, 레지스터 값 등과 같은 유용한 정보를 표시하면서도 이전과 동일한 디버거 CLI를 제공합니다.
.gdbinit
자동으로 통합하도록을 수정할 수 있습니다 . 그러나 디스플레이 자체는 GDB 외부에 있습니다 (예 : tmux 분할).
GEF
GEF 는 또 다른 옵션이며 다음과 같이 설명됩니다.
동적 분석 및 익스플로잇 개발 과정에서 Python API를 사용하여 GDB에 추가 기능을 제공하기 위해 주로 익스플로 터 및 리버스 엔지니어가 사용하는 것이 목표입니다.
색상은 아니지만 gdb의 텍스트 gui를 고려하십시오 . 사용 가능한 gdb와는 크게 다릅니다.
다음과 같이 시작할 수 있습니다.
gdb -tui executable.out
스크린 샷 :
보다시피 주요 기능은 다음과 같습니다.
- 소스의 어떤 라인과 주변 라인을 보여줍니다
- 중단 점 표시
나는 당신이 프론트 엔드를 원하지 않았다는 것을 알고 있습니다. 그러나 cgdb 는 gdb와 매우 비슷하지만 텍스트 모드이지만 코드에서 구문 강조 표시가있는 위의 소스 창이 있습니다.
색상을 사용하여 gdb의 모양을 크게 향상시킬 수 있습니다. 이는 다음 방법 중 하나를 통해 수행됩니다.
"프롬프트 프롬프트"를 통한 컬러 프롬프트. 예를 들어, 프롬프트를 굵고 빨간색으로 표시하십시오.
set prompt \033[1;31m(gdb) \033[m
또는 프롬프트를 굵고 빨간색으로 새 모양으로 만듭니다.
set prompt \033[01;31m\n\n#####################################> \033[0m
후크를 통한 컬러 명령
- "list"명령의 색상이 지정된 구문 강조 표시.
모든 예제는 Michael Kelleher가 작성한 다음 블로그 게시물에서 볼 수 있습니다.
"GDB 아름답게하기", 2010 년 5 월 12 일 (아카이브를 통해)
"실험적인 GDB 구문 강조", 2010 년 5 월 15 일 (archive.org를 통해)
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
경고 : 버기. TUI 지원, '사용자 모드'해킹이 없습니다.
여기서 주요 부분을 찾아서 약간 수정했습니다. 강조 표시, c ++ filt가 필요합니다. 색상이 엉망이되면 명령을 다시 발행하십시오.
cgdb
보다 훨씬 낫다 gdb -tui
깔끔하게, 방금 colout을 사용 하여이 핵을 발견했습니다 : https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
다음과 같이 강조하고 싶었습니다. 라이브러리가 아닌 소스 파일에 속하는 스택 추적 행을 강조하십시오.
해결책은 gdb-python을 사용하는 것입니다 (MSYS에서; Linux에서는 일반적으로 gdb
이미 파이썬이 내장되어 있습니까?), hook backtrace
, use
python stack_trace = gdb.execute('backtrace', False, True')
그런 다음 stack_trace
파이썬의 정규 표현식으로 처리하고 인쇄하십시오. 굵은 색과 다른 색은 다음과 같은 기능으로 달성됩니다.
def term_style(*v):
"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""
return '\x1B['+';'.join(map(str, v))+'m'
#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)
다가오는 GDB 8.3의 새로운 기능 !
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
이제 CLI 및 TUI에 터미널 스타일을 사용할 수 있습니다. GNU 소스 하이라이트는 또한 소스 코드 스 니펫의 스타일을 제공하는 데 사용될 수 있습니다. 자세한 정보는 아래의 "스타일 설정"명령을 참조하십시오.
이 구성으로 또 다른 좋은 색상 조합이 제공됩니다 . 백 트레이스 검사가 훨씬 쉬워집니다. 사용하려면 해당 파일을 다른 이름으로 저장하고 ~/.gdbinit
gdb를 정상적으로 실행하십시오.
원하는 색상을 얻을 수 있습니다.
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
'IT' 카테고리의 다른 글
Windows 7의 명령 프롬프트에서 Python 프로그램을 어떻게 실행합니까? (0) | 2020.06.04 |
---|---|
jQuery 액세스 입력 숨겨진 값 (0) | 2020.06.04 |
Java에서 정렬 된 컬렉션 (0) | 2020.06.04 |
Git 병합 롤백 (0) | 2020.06.04 |
필터링 애플리케이션을위한 elasticsearch vs MongoDB (0) | 2020.06.04 |