C언어를 사용하여 개발을 하다보면, 제일 말썽을 많이 일으키는게 메모리입니다.
C언어는 메모리를 직접 컨트롤 하기 때문에 이 부분에서 실수를 하게되면, sergment fault가 자주 발생하게됩니다.
코드가 길어지고, 복잡해지면 메모리 부분에 대해 체크하는게 상당히 어렵고, 시간이 많이 소요됩니다.
그렇기 때문에 리눅스에서는 메모리에 대한 문제를 체크할 수 있는 툴이 있습니다.
바로 valgrind입니다
공식 홈페이지는 https://valgrind.org/ 입니다.
valgrind는 오픈 소스이며 무료로 사용할 수 있습니다.
valgrind는 메모리 뿐만 아니라 리눅스 프로그램을 디버깅할 수 있고, 프로그램의 속도 향상에 도움을 줄 수 있습니다.
또한, 리눅스, 맥, 안드로이드 등 에서 사용할 수 있으며, C/C++로 작성된 프로그램에서 사용하기에 유용합니다.
그러나 언어에 크게 구애를 받지는 않습니다.
valgrind는 리눅스를 설치하면 기본적으로 보통 설치되어 있습니다.
Redhat 6.8 기준으로는 아래의 명령어로 설치할 수 있습니다
]# yum install valgrind
Ubuntu 20.04.1 LTS 기준으로는 아래의 명령어로 설치할 수 있습니다
]# sudo apt install valgrind
그럼 예제를 통해서 valgrind 사용법을 알아보겠습니다.
valgrind 기본 사용법은 아래와 같습니다
]# valgrind [실행파일]
단, 여기서 실행파일은 컴파일 할 때, 디버그 옵션을 추가해야됩니다.
valgrind는 디버깅을 이용하여 체크를 하다보니 필수적으로 넣어야 됩니다.
valgrind 명령어에 옵션을 추가하여 사용할 수 있지만, 기본적인 것만 보여드리겠습니다.
위의 그림은 malloc, free로 메모리를 정상적으로 처리했을 경우입니다.
따로 문제될 건 없습니다.
위의 그림은 malloc만 한 후, free를 하지 않았습니다.
LEAK SUMMARY 부분을 보시면 400바이트에서 LEAK이 발생했다고 나옵니다.
위 그림은 --leak-check=full 옵션을 추가하여 다시 실행해보았습니다.
main.c의 6라인에서 malloc이 되었고, 그 부분에 대해 문제가 있다고 구체적으로 나옵니다.
이 옵션만으로도 어느정도는 추적을 할 수 있습니다.
'운영체제 > 리눅스' 카테고리의 다른 글
[리눅스] yum으로 rpm 파일 다운로드 (0) | 2022.07.20 |
---|---|
[리눅스] source 명령어 (0) | 2022.07.11 |
[리눅스] 멀티플렉싱 (0) | 2022.05.17 |
[리눅스] CentOS hostname 변경 (0) | 2022.02.10 |
[리눅스] apt와 apt-get (0) | 2022.01.13 |