LLDB😍]Debugging😍 C/C++ with LLDB 명령어총정리~😍Tutorial&LLDB 홈페이지
Pdf정리 된거 최고!!
malloc_info --type [16진수메모리 주소]ex)0x100006290
(lldb) mem read 0x100006290
0x100006290: 01 7d 40 93 00 00 00 90 00 90 06 91 34 f5 ff 97 .}@.........4...
0x1000062a0: fd 7b c1 a8 c0 03 5f d6 ff 43 02 d1 e0 1b 00 f9 .{...._..C......
21분30초부터
LLDB에서 파이썬 쓰는 법 나옴.
처음에 이론 좀 나오다가 타이핑 해주기 시작함
https://www.youtube.com/watch?v=gT_YyMlIrdA
https://lldb.llvm.org/use/map.html
Debugging C/C++ with LLDB Tutorial
https://www.youtube.com/watch?v=2GV0K9Y2MKA
다른 영상
https://www.youtube.com/watch?v=3BkEOvI36Ds
방콕 Dev. 26분 30초 부터 GDB영상이라 명령어 잘 확인해서 해야함
내가 하는건 LLDB임
https://www.youtube.com/watch?v=GVCR8b_33zo&t=1723s
fsanitize=address
31분 56초
LLDB로 주소 heap/stack 보는 컴파일 C/C++
https://www.youtube.com/watch?v=lFew5gIF-Ro
Xcode 설치하면 자동으로 됨.
LLDB 자동으로 설치 되서 그냥 치면 됨.
zsh 에서 bash치면 bash 들어가짐.
GDB
C/C++ 컴파일 할때 heap/stack인지 주소나오게 컴파일하기 | |
clang -g -fsanitize=address lldb_exmple3.c | -g -fsanitize=address 이거 죽인다. ㅋㅋㅋ |
cargo build --release |
release[optimized] - 이렇게 됨 |
cargo build | dev[unoptimized + debuginfo] 이렇게 표시되는거 확인 |
debug폴더로 들어가기 | |
실행파일 실행하기 bash창에서 lldb atest |
실행 파일LLDB로 열어주기 |
b main | Breakpoint 1: 2 locations. 브레이크 포인트 나옴 |
run r |
라인마다 메모리 주소와 변수 이동된거 자세히 나옴 r해도 run처럼 되는 듯 |
n | 다음 줄로 넘어감 |
c | continue |
register read | 레지스터 읽기 |
kill | 지금 보고 있는 코드 내용 종료 |
file atest 하면 cargo run처럼 결과 볼 수 있음 |
cargo run처럼 실행됨 |
Break Point설정하기 | |
br list | 현재 Break Point를 확인함 |
q or quit |
LLDB종료!exit |
LLDB Debugger
https://youtu.be/v_C1cvo1biI
위에 동영상 한글 설명 -한국사람이 쓴 글
https://80000coding.oopy.io/fad9b8da-d24c-4e17-97c7-4663f42b7968
LLDB 명령어 검정색 배경화면으로 이쁘게 다시 정리!
----gcc -옵션 붙혀서 컴파일
gcc -g file.c
//Learn the lldb debugger basics in 11 minutes | 2021 (Also works on M1 Apple Silicon)
// 10분30초
clang++ -g -std=c++17 seg.cpp -o prog
c++ -g demo.cpp
clang++ -g demo.cpp
// lldb로 stack/heap을 자세히 볼 수 있는 C/C++컴파일러 최고!!
clang -g -fsanitize=address lldb_exmple3.c
-------------------------
-----// vscode에서 새로운 터미널 창 띄우기
// Shift + cmd + p
// 명령팔렛트
// Terminal:Create New Terminal in Editor Area
// 코드창처럼 bash입력할 수 있게 공간 만들어줌
// Rust는
cargo build -release
// release[optimized]-이렇게 됨
cargo build // dev[unoptimized + debuginfo] 이렇게 바뀜
cd debug
// 디버그 폴더로 들어감
// zsh창이라면 bash창으로 바꿔줌
// 실행파일이 atest이라면
lldb atest
// 브레이크 포인트 걸기
b main
// 함수 이름
// 이렇게 나옴BreakPoint 1 : 2locations
b atest:50 // 파일 이름 : 줄
// 이경우 , atest 파일의 50번째 줄 부터 한 줄 씩 검사
r
// r 또는 run 으로 실행
n
// 한 줄 씩 step over
s // 함수 안으로 step in
bt
// backtrace
quit
q
//lldb 종료
gui
//그래픽 화면이라 보기는 편함.. 그래도 명령어로 연습하자!!!
register read 사용법
$ lldb generic001
(lldb) target create "generic001"
Current executable set to '/Users/globalyoung/Documents/Project/Github/rust_project/rust_polyglot/Rust_Lang/generic001/target/debug/generic001' (arm64).
(lldb) r
Process 4376 launched: '/Users/globalyoung/Documents/Project/Github/rust_project/rust_polyglot/Rust_Lang/generic001/target/debug/generic001' (arm64)
[(-10, -1000), (-9, -729), (-8, -512), (-7, -343), (-6, -216), (-5, -125), (-4, -64), (-3, -27), (-2, -8), (-1, -1), (0, 0), (1, 1), (2, 8), (3, 27), (4, 64), (5, 125), (6, 216), (7, 343), (8, 512), (9, 729)]
Process 4376 exited with status = 0 (0x00000000)
(lldb) b main
Breakpoint 1: 2 locations.
(lldb) list 2
2
3 fn y_xxx<T>(x: T) -> T
4 where
5 T: Mul<Output = T> + Copy,
6 {
7 x * x * x
8 }
9
10 fn main() {
11 let my_vec = (-10..10).map(|x| (x, y_xxx(x))).collect::<Vec<_>>();
(lldb) r
Process 4402 launched: '/Users/globalyoung/Documents/Project/Github/rust_project/rust_polyglot/Rust_Lang/generic001/target/debug/generic001' (arm64)
Process 4402 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2
frame #0: 0x0000000100008af8 generic001`main
generic001`main:
-> 0x100008af8 <+0>: stp x29, x30, [sp, #-0x10]!
0x100008afc <+4>: mov x29, sp
0x100008b00 <+8>: mov x2, x1
0x100008b04 <+12>: mov x8, x0
Target 0: (generic001) stopped.
(lldb) register read
General Purpose Registers:
x0 = 0x0000000000000001
x1 = 0x000000016fdff188
x2 = 0x000000016fdff198
x3 = 0x000000016fdff348
x4 = 0x0000000000000000
x5 = 0x0000000000000000
x6 = 0x0000000000000000
x7 = 0x0000000000000000
x8 = 0x00000001000e4070 dyld`dyld4::sConfigBuffer
x9 = 0x0000000000000002
x10 = 0x0000000000000000
x11 = 0x0000000000000002
x12 = 0x0000000000000002
x13 = 0x0000000000000000
x14 = 0x0000000000000140
x15 = 0x0000000000000000
x16 = 0x000000030019b088
x17 = 0x6ae100016fdfe3f0
x18 = 0x0000000000000000
x19 = 0x0000000100138060
x20 = 0x0000000100008af8 generic001`main
x21 = 0x00000001000e4070 dyld`dyld4::sConfigBuffer
x22 = 0x0000000000000000
x23 = 0x0000000000000000
x24 = 0x0000000000000000
x25 = 0x0000000000000000
x26 = 0x0000000000000000
x27 = 0x0000000000000000
x28 = 0x0000000000000000
fp = 0x000000016fdff160
lr = 0x000000010008908c dyld`start + 520
sp = 0x000000016fdff020
pc = 0x0000000100008af8 generic001`main
cpsr = 0x60001000
(lldb)
(lldb) gui
(lldb) exit
Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y
내가 공부하려고 만든 영상
LLDB는 13분 35초부터
한글러스트Rust강의_040⭐️Rust_Generic기초&LLDB_Debugging map, collect #rust #generics #debugging #doomemacs
https://youtu.be/M0ucnOSMik4
한국사람이 쓴 다른글 GDB로 정리한 글이라 LLDB명령어가 달라서 잘 봐야함!!
https://dining-developer.tistory.com/13
더 자세히 정리
https://gwpaeng.tistory.com/m/274
github - google/sanitizers: AddressSanitize
https://github.com/google/sanitizers/wiki
Debugging with LLVM A quick introduction to LLDB and LLVM sanitizers
https://www.youtube.com/watch?v=lFew5gIF-Ro
내가 공부하려고 만든 영상
LLDB는 13분 35초부터
한글러스트Rust강의_040⭐️Rust_Generic기초&LLDB_Debugging map, collect #rust #generics #debugging #doomemacs
https://youtu.be/M0ucnOSMik4