티스토리 뷰

저는 맥북(MacBook Air, High sierra)을 사용중이며, Homebrew를 사용해 gdb를 설치하였습니다.

그러나 간단한 예제 프로그램을 만들고 디버깅을 시도했지만, 계속 실패를 했네요. ^^;

결국엔 codesign 관련 문제라는 것을 알았고, 이제서야 디버깅이 가능해졌습니다.

 

gdb 설치관련해서는 아래 사이트를 참고하면 될 것 같습니다.

https://betterourlife.blog.me/221359465087

 

그럼 아래 예제를 통해 디버깅해 보겠습니다. (html에서 <pre class="brush: c"> 소스코드 </pre>를 사용해 보았습니다. ^^)

/* segfault.c
*/
/* simple example for debugging
*/

#include "stdio.h"

int g_sum = 0;

int sum(int a, int b)
{
	int *ptr = NULL;

	printf("a=%d, b=%d\n", a, b);
	*ptr = a+b;
	return *ptr;
	//return a+b;
}

int main()
{
	int a=10;
	int b=20;

	printf("sum=%d\n", sum(a, b));
	return 0;
}

 

간단한 코드라서 문제되는 부분을 확인했을 거라고 생각됩니다.

먼저 -g 옵션을 사용해 컴파일을 한후 실행파일을 실행시켜보니 segmentation fault가 발생하였습니다.

$ gcc -g -o segfault segfault.c $ ./segfault a=10, b=20 Segmentation fault: 11

 

그럼 gdb를 실행시켜 봅니다. 위에서와 같이 소스코드는 이미 알고 있는 상태이지만, 확인을 위해 list를 입력합니다. 라인번호도 보여집니다.

그럼 break point를 설정하고 디버깅을 해보겠습니다.

명령어는 break/run/step을 사용했습니다.

 

sum 함수에 break point를 설정하고 한줄씩 따라가 봅니다. 문제되는 부분을 수행하면서 SIGSEGV 시그널을 받았네요. 

그럼 변수를 살펴볼까요.

0x0번지의 메모리에 접근할 수 없다고 나옵니다. 아시다시피 코드상에서는 a+b의 값을 여기에 쓰려고 하고 있었습니다.

지금까지 몇가지 명령어를 통해 gdb를 간단히 사용해 보았습니다.

다음에는 gdb 명령어들을 정리하고, 익숙해 지도록 자주 사용을 해야겠습니다. ^^

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함