compile 주의 -g 가 있는 경우에만 가능 합니다. 순서( breakpoint 찾기 -> r로 실행 -> s,c,n으로 파악 -> fr,po 로 파악 lldb -- ./cub3d map.cub // ./cub3d 와 map.cub을 가지고 lldb 하겠다 (target 설정) (lldb) r // lldb 실행 (lldb) bt // backtrace로 어디가 틀린지 자세히 확인 (lldb) br s -f main.c -l 1047 //b main.c:1047 main.c함수의 1047에 문제가 발생되었을 떄 breakpoint 걸어주는 것 //breakpoint로 들어가서 진행 과정 (lldb) r (lldb) s // step in 함수 안으로 들어가기 (lldb) c // 계속 프로그램 진행(..
lldb (Debugger) c 코드를 검사하는 도구 Debugger 코드를 검사할 수 있는 도구 Debugging 코드에서 버그를 제거하는 것 lldb 사용하기 위해 사용하는 옵션 + 유용옵션 gcc -g: 컴파일러에게 디버깅 정보를 출력 파일에 포함하도록 지시한다. -fsanitize=address: 메모리 오류를 찾아줍니다. (-g 다음에 써주는 것이 좋다.) https://blog.ifunfactory.com/2019/07/03/address-sanitizer-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%ED%9E%99-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%A4%EB%A5%98-%EB%94%94%EB%B2%84%EA%B9%85%ED..
해당 에러는 header file에 배열을 넣어서 발생하였습니다. 즉, header file, source file이건 변수가 선언이 되면 global로 되어서 해당 header file을 include한 source file을 compile한 object file을 링크하려고 하면 중복 에러가 되는 것입니다. => include 할 때 마다 하나의 변수 이름에 대응되는 주소가 추가되는 것입니다. 해결 => 헤더파일에는 변수의 선언만 해야합니다. map.h (header file) #ifndef MAP_H # define MAP_H extern int map[24][24]; double PI = 3.14; #endif map.c (source file) #include "map.h" int map[24]..
int *p : 주소를 저장해 놓는 공간 만들기 => 자료형 + *(포인터) *p : 역참조로 int *p와 같지 않다 (p에 주소가 있으면 주소값을 찾아가라.) + 배열과 포인터 #include int main(){ // 주소랑 사칙연산을 할 수 있다. int a[3]; int *p; //주소를 저장하는 곳 // a는 배열의 첫번째 주소 (= &a[0]) // 주소에 *을 붙이면 해당 주소의 값(역참조) // *(a+i) == a[i] return 0; } + 포인터 문자열은 수정이 불가능 하다 . #include int main(){ int *p = "NoChange" return 0; }