LLDB(디버거)

LLDB (debugger)
LLDB
LLDB screenshot.png
개발자LLVM 개발자 그룹
안정된 릴리스
14[1].0.6 / 2022년 6월 25일; 40일 (2022년 6월 25일)
저장소
기입처C++
운영 체제macOS i386 및 x86-64, Linux, FreeBSD, NetBSD, Windows
유형디버거
면허증.UIUC(BSD 스타일)
LLVM 예외 포함 Apache 라이센스 2.0([2]v9.0.0 이후)
웹 사이트lldb.llvm.org

LLDB 디버거(LLDB)는 LLVM 프로젝트의 디버거 구성 요소입니다.Clang 식 파서 및 LLVM 디스어셈블러와 같이 LLVM의 기존 라이브러리를 광범위하게 사용하는 재사용 가능한 컴포넌트 세트로 구축되어 있습니다.LLDB는 일리노이 대학/NCSA 오픈 소스 라이센스([3]BSD 스타일허용 소프트웨어 라이센스)에 따른 무료 오픈 소스 소프트웨어입니다.v9.0.0 이후 LLVM [2]예외와 함께 Apache License 2.0에 반영되었습니다.

현재 상태

LLDB는 C, Objective-CC++로 작성된 프로그램의 디버깅을 지원합니다.Swift 커뮤니티는 언어에 대한 지원을 추가하는 버전을 유지합니다.MacOS, Linux, FreeBSD, NetBSDWindows에서 [4]작동하는 것으로 알려져 있으며 i386, x86-64ARM 명령 세트[5]지원합니다.LLDB는 Xcode 5 이후 기본 디버거입니다.Android Studio는 [6]디버깅에도 LLDB를 사용합니다.LLDB는 Visual Studio Code,[7] Eclipse [8]CLion [9]다른 IDE에서 사용할 수 있습니다.

기능 매트릭스
특징 FreeBSD 리눅스 MacOS 넷BSD 창문들
역추적 Yes Yes Yes Yes Yes
중단점 Yes Yes Yes Yes Yes
C++11 Yes Yes Yes Yes ?
명령줄 lldb 도구 Yes Yes Yes Yes Yes
코어 파일 디버깅 Yes Yes Yes Yes Yes
디버깅 서버(리모트 디버깅) Yes Yes Yes Yes No
분해 Yes Yes Yes Yes Yes
표현 평가 일부 버그에 대응 일부 버그에 대응 Yes 일부 버그에 대응 일부 버그에 대응
JIT 디버깅 ? 심볼 디버깅만 테스트되지 않았다 작업 진행 중 No
목표-C 2.0: ? Yes ?

명령어 예시

lldb program 셸에서 "program" 디버깅
run 로드된 프로그램 실행
break set -n main "main" 기능의 시작 부분에 중단점을 설정합니다.
bt 역추적(프로그램이 크래쉬 했을 경우)
register read 모든 레지스터 덤프
di -n main "main" 기능을 분해합니다.

세션 예시

C 로 기재되어 있는 다음의 잘못된 프로그램을 생각해 주세요.

#실패하다 <stdio.h>  인트 주된(무효) {    메시지 = 안녕, 세상아!\n";   인쇄물(%s, 메시지);    돌아가다 0; } 

위의 코드는 macOS에서 clang 컴파일러를 사용하여 컴파일할 수 있습니다.-g생성된 바이너리에 대한 적절한 디버깅 정보(소스 코드 포함)를 포함하도록 플래그를 지정하면 LLDB를 사용하여 쉽게 검사할 수 있습니다.위의 코드가 포함된 파일의 이름이test.c컴파일 명령어는 다음과 같습니다.

$ clang - g test . c - o 테스트

이제 바이너리를 실행할 수 있습니다.

$ . / 테스트 세그멘테이션 장애

예제 코드가 실행되면 분할 결함이 생성되므로 lldb를 사용하여 문제를 검사할 수 있습니다.

$ lldb test (lldb) target create "test" 현재 실행 파일이 'test'(x86_64)로 설정되어 있습니다.(lldb) 시작프로세스 70716 실행: '/Users/wikipedia/test'(x86_64) 프로세스 70716 중지 * 스레드 #1, 대기열 = 'com.apple.main-blash', 중지 이유 = EXC_BAD_ACCESS(code=1, address=0xffffff90)프레임#0:0x00007fff6c7c46f2 libsystem_platform.dylib`_platform_strlen+18libsystem_platform.dylib`_platform_strlen:->, 0x7fff6c7c46f2<>+18&gt은pcmpeqb xmm0,xmmword ptr 0x7fff6c7c46f6<>[rdi], +22&gt은pmovmskb esi, xmm0 0x7fff6c7c46fa<>+26>.:rcx, 0xf 0x7fff6c7c46fe<>.;+30&gt은 또는 rax, -0x1Target 0: (테스트)가 중지되었습니다. 

함수를 호출할 때 문제가 발생.strlen단, 백트레이스를 실행하여 문제의 원인이 되고 있는 코드의 정확한 행을 특정할 수 있습니다.

(ldb) bt * 스레드 #1, 큐 = 'com.apple.main-buff', 중지 이유 = EXC_BAD_ACCESS(코드=1, 주소=0xffffff90) * 프레임 #0: 0x00007ff6c7c46f2 libsystem_platform.dylib'_platform_stren + 18 프레임 #1: 0x00007ff6c66b16a libsystem_c.dylib'_brintf + 8812 프레임 #2: 0x00007ff6c6911c3 libsystem_c.dylib'_v2printf + 475 프레임 #3: 0x00007ff6c668e22 libsystem_c.dylib' printf_l + 54 프레임 #4: 0x00007ff6c666f72 libsystem_c.dylib'printf + 174 프레임 #5: 0x0000000100000f6d test'main at test.c:5:2 프레임 #6: 0x00007ff6c5dc3d5 libdyld.dylib'start + 1 (ldb) 소스 리스트 3 int 메인(표준) { 4 char msg = "안녕하세요, 세상아!\n"; 5 printf (%s), msg); 6 리턴 0; 7    } 

로 시작하는 행부터frame #5, LLDB는 에러가 다음 행에 있음을 나타냅니다.test.c.입니다.source list이것은, 에의 콜을 나타내고 있는 것을 알 수 있습니다.printf. 예외 코드에 따라EXC_BAD_ACCESS백트레이스로부터strlen는 비활성 [10]포인터를 참조함으로써 접근할 수 없는 메모리 영역에서 읽기를 시도하고 있습니다.소스코드로 돌아가면 변수가msg종류char단, 문자 대신 문자열이 포함되어 있습니다.이 문제를 해결하기 위해 코드를 수정하여msg의 문자열에 대한 포인터입니다.chars추가함으로써* 연산자:

#실패하다 <stdio.h>  인트 주된(무효) {   * 메시지 = 안녕, 세상아!\n";   인쇄물(%s, 메시지);    돌아가다 0; } 

실행 파일을 다시 컴파일하고 실행한 후 LLDB는 다음과 같은 올바른 결과를 제공합니다.

(ldb) target 생성 "test" 현재 실행 파일이 '테스트'(x86_64)로 설정되어 있습니다. (ldb) 달려. 프로세스 93319 시작: '/Users/wikipedia/test'(x86_64) 안녕, 세상아! 프로세스 93319가 상태 = 0(0x00000000)으로 종료되었습니다. (ldb) 

LLDB는 프로그램을 실행하여 출력 결과를 출력합니다.printf화면을 표시합니다.프로그램이 정상적으로 종료되면 LLDB는 프로그램을 실행하고 있는 프로세스가 완료되었음을 나타내며 종료 상태를 출력합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "LLVM 14.0.6 Release". 25 June 2022. Retrieved 27 June 2022.
  2. ^ a b LICENSE.TXT, llvm.org, retrieved 2019-09-24
  3. ^ "LLVM 릴리즈 라이선스"
  4. ^ "LLVM Project Blog". 20 January 2015.
  5. ^ a b "LLDB Status". Retrieved January 31, 2022.
  6. ^ "Debug your app".
  7. ^ "Add a new tool named "lldb-vscode" that implements the Visual Studio Code Debug Adaptor Protocol".
  8. ^ "CDT/Useer/FAQ".
  9. ^ "LLDB CLion Blog".
  10. ^ "Technical Note TN2151: Understanding and Analyzing Application Crash Reports". Documentation Archive. Apple Developer. Retrieved 13 February 2020.

외부 링크