본문 바로가기
대외활동/시스템프로그래밍

0822 gdb, core, valgrind

by hoshi03 2024. 8. 22.

• 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