• gdb 디버깅
ulimt -a 로 core file size를 확인해보면 기본으로 0, core 파일이 생성되지 않는다
ulimit -c unlimited로 설정해두면 core 파일이 생성된다
gdb ./main core.19963
생성된 코어와 함께 gdb 디버거를 호출하면
bt를 입력하면 코어가 터진 해당 라인이 호출된다
• valgrind
make로 만든 파일을 valgrind로 실행하면 메모리 누수에 관련된 것을 디버깅 할 수 있다
valgrind --leak-check=full ./example5
example5를 실행했을때 아래 주석처리한 delete을 살리면
이중 delete가 되어서 할당보다 해제가 많은 경우가 된다
#include <iostream>
using namespace std;
int*memAlloc(int);
void setFree(int*);
int main()
{
int *mainPtr;
mainPtr = memAlloc(sizeof(int));
*mainPtr=100;
if(*mainPtr==100)
cout << "100" << endl;
setFree(mainPtr);
//delete mainPtr;
return 0;
}
int* memAlloc(int size)
{
return new int;
}
void setFree(int* mainPtr)
{
delete mainPtr;
}
valgrind의 heap summary 부분을 보면 3번 할당, 4번 해제가 되었다고 하니
이중 해제가 되는 19번 라인을 수정하자
==37349== Invalid free() / delete / delete[] / realloc()
==37349== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==37349== by 0x109264: main (example5.cpp:19)
==37349== Address 0x4dd4c80 is 0 bytes inside a block of size 4 free'd
==37349== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==37349== by 0x1092AC: setFree(int*) (example5.cpp:31)
==37349== by 0x10924E: main (example5.cpp:18)
==37349== Block was alloc'd at
==37349== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==37349== by 0x109284: memAlloc(int) (example5.cpp:26)
==37349== by 0x1091FE: main (example5.cpp:11)
==37349==
==37349==
==37349== HEAP SUMMARY:
==37349== in use at exit: 0 bytes in 0 blocks
==37349== total heap usage: 3 allocs, 4 frees, 73,732 bytes allocated
==37349==
==37349== All heap blocks were freed -- no leaks are possible
==37349==
==37349== For lists of detected and suppressed errors, rerun with: -s
==37349== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
'대외활동 > 시스템프로그래밍' 카테고리의 다른 글
시험대비 C 복습 (0) | 2024.08.23 |
---|---|
라이브러리 (0) | 2024.08.22 |
보이드 포인터, 함수 포인터 복습 (0) | 2024.08.21 |
리눅스 쉘 스크립트 조건문 (0) | 2024.08.21 |
리눅스 쉘 프로그래밍 (0) | 2024.08.20 |