코딩Coding/Rust_Debugger_heap_memory_check

LLDB😍]Debugging😍 C/C++ with LLDB 명령어총정리~😍Tutorial&LLDB 홈페이지

내인생PLUS 2022. 2. 1. 16:51
728x90

Pdf정리 된거 최고!!

lldb cheat sheet.pdf
0.06MB











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

 

GDB to LLDB command map — The LLDB Debugger

GDB to LLDB command map Below is a table of GDB commands with the LLDB counterparts. The built in GDB-compatibility aliases in LLDB are also listed. The full lldb command names are often long, but any unique short form can be used. Instead of “breakpoint

lldb.llvm.org

 


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

clang -g -fsanitize=address lldb_example3.c


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

 

Seg fault 나서 다 때려치고 싶을 때.. lldb 간단 사용법

DEBUG

80000coding.oopy.io





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

 

gdb - 간단한 명령어/사용법/단축어 정리(cheat sheet)

GDB를 이용해 간간히 디버깅 하긴 했지만, 자주 사용하지 않아서 익숙하지 않았다. 앞으로 사용할 때마다 검색시간을 줄이기 위해 내가 사용하는/했던 gdb 명령어를 정리해놓기로 했다. 명령어를

dining-developer.tistory.com







더 자세히 정리

https://gwpaeng.tistory.com/m/274

 

lldb (Debugger)

lldb (Debugger) c 코드를 검사하는 도구 Debugger 코드를 검사할 수 있는 도구 Debugging 코드에서 버그를 제거하는 것 lldb 사용하기 위해 사용하는 옵션 + 유용옵션 gcc -g: 컴파일러에게 디버깅 정보를 출

gwpaeng.tistory.com








github - google/sanitizers: AddressSanitize

https://github.com/google/sanitizers/wiki

 

GitHub - google/sanitizers: AddressSanitizer, ThreadSanitizer, MemorySanitizer

AddressSanitizer, ThreadSanitizer, MemorySanitizer - GitHub - google/sanitizers: AddressSanitizer, ThreadSanitizer, MemorySanitizer

github.com




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

















반응형