LLDB(디버거)
LLDB (debugger)![]() | |
개발자 | LLVM 개발자 그룹 |
---|---|
안정된 릴리스 | 14[1].0.6 / 2022년 6월 25일; 2022년 25일) |
저장소 | |
기입처 | C++ |
운영 체제 | macOS i386 및 x86-64, Linux, FreeBSD, NetBSD, Windows |
유형 | 디버거 |
면허증. | UIUC(BSD 스타일) LLVM 예외 포함 Apache 라이센스 2.0([2]v9.0.0 이후) |
웹 사이트 | lldb |
LLDB 디버거(LLDB)는 LLVM 프로젝트의 디버거 구성 요소입니다.Clang 식 파서 및 LLVM 디스어셈블러와 같이 LLVM의 기존 라이브러리를 광범위하게 사용하는 재사용 가능한 컴포넌트 세트로 구축되어 있습니다.LLDB는 일리노이 대학/NCSA 오픈 소스 라이센스([3]BSD 스타일의 허용 소프트웨어 라이센스)에 따른 무료 오픈 소스 소프트웨어입니다.v9.0.0 이후 LLVM [2]예외와 함께 Apache License 2.0에 반영되었습니다.
현재 상태
LLDB는 C, Objective-C 및 C++로 작성된 프로그램의 디버깅을 지원합니다.Swift 커뮤니티는 언어에 대한 지원을 추가하는 버전을 유지합니다.MacOS, Linux, FreeBSD, NetBSD 및 Windows에서 [4]작동하는 것으로 알려져 있으며 i386, x86-64 및 ARM 명령 세트를 [5]지원합니다.LLDB는 Xcode 5 이후 기본 디버거입니다.Android Studio는 [6]디버깅에도 LLDB를 사용합니다.LLDB는 Visual Studio Code,[7] Eclipse [8]및 CLion [9]등 다른 IDE에서 사용할 수 있습니다.
특징 | FreeBSD | 리눅스 | MacOS | 넷BSD | 창문들 |
---|---|---|---|---|---|
역추적 | ![]() | ![]() | ![]() | ![]() | ![]() |
중단점 | ![]() | ![]() | ![]() | ![]() | ![]() |
C++11 | ![]() | ![]() | ![]() | ![]() | ? |
명령줄 lldb 도구 | ![]() | ![]() | ![]() | ![]() | ![]() |
코어 파일 디버깅 | ![]() | ![]() | ![]() | ![]() | ![]() |
디버깅 서버(리모트 디버깅) | ![]() | ![]() | ![]() | ![]() | ![]() |
분해 | ![]() | ![]() | ![]() | ![]() | ![]() |
표현 평가 | 일부 버그에 대응 | 일부 버그에 대응 | ![]() | 일부 버그에 대응 | 일부 버그에 대응 |
JIT 디버깅 | ? | 심볼 디버깅만 | 테스트되지 않았다 | 작업 진행 중 | ![]() |
목표-C 2.0: | ? | — | ![]() | ? | — |
명령어 예시
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>은pcmpeqb xmm0,xmmword ptr 0x7fff6c7c46f6<>[rdi], +22>은pmovmskb esi, xmm0 0x7fff6c7c46fa<>+26>.:rcx, 0xf 0x7fff6c7c46fe<>.;+30>은 또는 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는 프로그램을 실행하고 있는 프로세스가 완료되었음을 나타내며 종료 상태를 출력합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "LLVM 14.0.6 Release". 25 June 2022. Retrieved 27 June 2022.
- ^ a b LICENSE.TXT, llvm.org, retrieved 2019-09-24
- ^ "LLVM 릴리즈 라이선스"
- ^ "LLVM Project Blog". 20 January 2015.
- ^ a b "LLDB Status". Retrieved January 31, 2022.
- ^ "Debug your app".
- ^ "Add a new tool named "lldb-vscode" that implements the Visual Studio Code Debug Adaptor Protocol".
- ^ "CDT/Useer/FAQ".
- ^ "LLDB CLion Blog".
- ^ "Technical Note TN2151: Understanding and Analyzing Application Crash Reports". Documentation Archive. Apple Developer. Retrieved 13 February 2020.