대화식 디버깅 중에 GDB 출력을 강조하고 색상하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/209534

  •  03-07-2019
  •  | 
  •  

문제

답장하지 마십시오. DDD, Nemiver, EMACS, VIM 또는 기타 프론트 엔드를 사용해야합니다. GDB를 선호하지만 일부 터미널 색상으로 출력을보고 싶습니다.

도움이 되었습니까?

해결책

.gdbinit

당신은 당신을 조정할 수 있습니다 ~/.gdbinit 색상이 있습니다. Mammon 's를 사용할 수 있습니다 .gdbinit 여기에서 사용할 수 있습니다.

https://github.com/gdbinit/gdbinit

원하는만큼 조정할 수 있습니다. 나는 이것을 찾았다 이렇게 대답합니다. 다음은 얻을 수있는 출력의 종류입니다.

.gdbinit

Github 저장소도 사용할 수 있습니다. https://github.com/gdbinit/gdbinit

참고로, 같은 아이디어도 LLDB에 적용됩니다.

GDB 대시 보드

같은 개념에 따라 GDB 대시 보드 파이썬에서 GDB에 대한 모듈 식 Visual 인터페이스를 제공합니다.

GDB Dashboard

(무효) 워커

또 다른 유사한 프로젝트는 GDB의 Python 지원을 사용하여 더 많은 확장 성을 제공하므로 확인할 가치가 있습니다. https://github.com/dholm/voidwalker

@dholm은 또한 자신의 것을 제공합니다 .gdbinit 이전의 영감.

(void)walker

PWNDBG

일부 프로젝트는 개선 된 디스플레이를 포함하여 유용한 기능 세트를 제공합니다. 이것은 사실입니다 페다 또는 PWNDBG. 후자는 다음과 같은 설명을합니다.

PEDA 교체. 우리의 좋은 친구의 정신으로 windbg, pwndbg 발음됩니다 pwnd-bag.

  • 속도
  • 탄력성
  • 깨끗한 코드

PEDA의 것과 유사한 디버깅 및 악용 개발 및 더 나은 디스플레이를 지원하는 명령을 제공합니다 (프로젝트의 주요 초점은 아니지만). 소프트웨어는 여전히 개발 중이며 아직 제대로 출시되지 않았습니다.

pwndbg

볼트론

그만큼 프로젝트 설명 상태 :

Voltron은 해커를위한 확장 가능한 디버거 UI입니다. 다른 터미널에서 실행되는 유틸리티 뷰를 디버거 (LLDB 또는 GDB)에 첨부 할 수 있으며 분해, 스택 컨텐츠, 레지스터 값 등과 같은 유용한 정보를 표시하면서도 여전히 사용 된 디버거 CLI를 제공합니다.

당신은 당신의 수정할 수 있습니다 .gdbinit 자동으로 통합합니다. 그러나 디스플레이 자체는 GDB 외부에 있습니다 (예 : TMUX 분할).

voltron

GEF

GEF 또 다른 옵션이며 다음과 같이 설명됩니다.

동적 분석 프로세스 및 개발 과정에서 Python API를 사용하여 GDB에 추가 기능을 제공하기 위해 주로 익스플로잇 및 리버스 엔지니어가 사용하는 것이 목표입니다.

GEF

다른 팁

색상은 아니지만 GDB를 고려하십시오 텍스트 gui. 그것은 유용한 GDB가 얼마나 많은지에 큰 차이를 만듭니다.

다음과 같이 시작할 수 있습니다.

gdb -tui executable.out

스크린 샷 :

enter image description here

보시다시피, 주요 기능은 다음과 같습니다.

  • 우리가있는 소스의 라인과 주변 라인을 보여줍니다.
  • 중단 점을 보여줍니다

나는 당신이 프론트 엔드를 원하지 않았다는 것을 알고 있습니다. 하지만 어때요 CGDB GDB에 매우 가깝고 TextMode이지만 코드의 구문 하이라이트가있는 소스 창이 있습니다.

색상 사용을 통해 GDB의 등장을 크게 향상시킬 수 있습니다. 이것은 다음 방법 중 하나를 통해 수행됩니다.

  1. "설정 프롬프트"를 통해 색상화 프롬프트. 예를 들어, 프롬프트를 대담하고 빨간색으로 만듭니다.

    set prompt \033[1;31m(gdb) \033[m

    또는 프롬프트를 새로운 모양으로 대담하고 빨간색으로 만듭니다.

    set prompt \033[01;31m\n\n#####################################> \033[0m

    enter image description here

  2. 후크를 통한 색상 명령

  3. "목록"명령의 색상화 된 구문 강조 표시.

모든 예제는 Michael Kelleher가 작성한 다음 블로그 게시물에서 제공됩니다.

"Beautify GDB", 2010 년 5 월 12 일 (Archive.org를 통해)

"실험 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. 색상이 엉망이되면 RE 명령이 부족합니다.

cgdb 보다 훨씬 낫습니다 gdb -tui

깔끔한, 방금 Colout을 사용 하여이 해킹을 발견했습니다. https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

다음과 같이 강조하고 싶었습니다. 라이브러리가 아닌 내 소스 파일에 속하는 스택 추적 라인을 강조합니다.

해결책은 GDB-Python (MSYS; Linux에서 일반적으로 gdb 이미 파이썬 내장이 포함되어 있습니까?), 후크 backtrace, 사용

python stack_trace = gdb.execute('backtrace', False, True')

그런 다음 처리하십시오 stack_trace Python 's Regexes와 함께 인쇄하십시오. 대담하고 다른 색상은 다음과 같은 기능에 의해 달성됩니다.

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)

또 다른 좋은 색상 조합이 제공됩니다 이 구성. 뒤쪽을 훨씬 쉽게 검사하는 데 렌더링됩니다. 사용하려면 해당 파일을 저장하십시오 ~/.gdbinit GDB를 정상적으로 실행하십시오

다가오는 새로운 GDB 8.3!

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=Blob ;f=gdb/news

CLI 및 TUI에는 터미널 스타일을 사용할 수 있습니다. GNU 소스 하이라이트는 추가로 소스 코드 스 니펫 스타일을 제공하는 데 사용될 수 있습니다. 자세한 내용은 아래의 "Set Style"명령을 참조하십시오.

screenshot of gdb 8.2.91.20190401-23.fc30

원하는 색상을 얻을 수 있습니다.

# 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top