반응형
- Introduction
좋은 디버거는 문제를 해결하고, 프로그램을 좀 더 쉽게 개발하고 리버싱을 하는 등 다양한 방안에서 개발자에게 도움을 주는 도구 입니다. 많은 플랫폼에서 그에 맞춰 좋은 디버거들이 존재하고 개발자들은 자신에게 맞는 디버거를 사용하고 있습니다. 그 중 GDB(The GNU Debugger)는 많은 플랫폼, x86, x86-64, arm, aarch64, mips, SPARC등 다양한 아키텍처 에서 동작하는 UNIX 시스템에서 사용할 수 있는 디버거입니다. C / C++ 로 작성된 프로그램에서 사용할 수 있습니다.
처음 GDB를 공부하시는 분들이 많이 어려워 하시는게 언제 GDB를 사용해야 하는지 입니다. 디버거는 여러분들이 작성하는 프로그램에서 발생하는 문제를 해결하는데 매우 도움을 주지만 제대로 활용하지 못한다면 아무런 쓸모가 없어질테니 간단하게나마 언제 사용하면 좋을 지 정리해보고자 합니다.
- 특정 시점, 포인트에서 디버깅 : 디버깅하길 원하는 시점(특정 함수 또는 조건)에서 여러분들이 원하는 모든 정보를 얻을 수 있습니다
- 문제가 쉽게 재현됨 : 이슈 해결 시 쉽게 재현되는 것 만큼 좋은 건 없습니다. GDB를 이용하면 그 시점에서 문제의 원인을 더욱 빠르고 쉽게 해결할 수 있습니다.
- 문제 상황이 예측할 수 있을 때 : 여러분들이 문제가 되는 상황을 안다면, breakpoint를 이용해서 문제가 발생하는 상황에 대해 디버깅 할 수 있습니다.
이 외에도 다양한 문제에서 사용가능합니다. 여러가지 기능들을 여러 예시를 통해 설명하며 이해할 수 있도록 하겠습니다.
gdb를 이용해 디버깅 하는 방법에 대해 알아보겠습니다. 그럼 어떻게 여러분들의 프로그램에 gdb를 적용할 수 있는지 살펴보죠. 프로그램에 gdb를 이용하는 방법은 3가지 입니다.
- gdb를 이용해서 직접 프로그램을 실행하자
- 실행중인 프로그램에 gdb를 붙여 사용하자
- core file을 사용해서 분석하자
위 내용을 아래처럼 표현할 수 있을 것 같습니다.
gdb를 run, attach, load의 방식을 통해 분석이 가는하며 직접 프로그램을 실행하며 분석하는 2가지 방법과 사후 덤프파일(core file)을 이용한 방법도 있습니다. load 방식은 개발 후 검증 또는 릴리즈 후 발생하는 문제를 report 받을 때 사용하면 직접 문제를 재현해보지 않아도 문제의 원인을 찾을 수 있습니다.
먼저 run 방식과 attach 방식을 통해 gdb의 기능들을 살펴보고, 추후 load 방식에 대해 알아보겠습니다.
- gdb run / attach를 통한 디버깅하기
예제 프로그램을 이용해 간단히 배워봅시다.
매우 단순한 프로그램입니다. 2개의 입력인자를 받아 더하는 방식이네요. 이제 이 코드를 조금씩 분석해 나가며 기능들을 살펴보시죠.
#include <stdio.h> #include <stdlib.h> static int sum(int a, int b) { return a + b; } int main(int argc, char *argv[]) { int a; int b; int c; if (argc != 3) return -1; a = atoi(argv[1]); b = atoi(argv[2]); c = sum(a, b); printf("%d\n", c); return 0; } | cs |
- 빌드하기
gdb를 사용하려면 컴파일 시 gcc에 -g 옵션을 주어 디버그 정보를 생성해줘야 합니다. 자세한 건 gcc 옵션을 살펴보세요! 만약 빌드 시 Makefile을 이용한다면 CFLAGS+="-g" 옵션을 추가해 주세요!
$ gcc example1.c -g -o example1
위와 같이 빌드하시면 example 이란 이름의 ELF 파일이 생성됩니다. 자 이제 gdb를 이용해 분석해봅시다. 아래처럼 gdb 뒤에 실행을 시키면 gdb가 실행되며 디버깅할 준비를 시작합니다.
linuxias@desktop $ gdb ./example1 GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from ./example1...done. (gdb) |
gdb를 실행하는 방법까지 확인해보았습니다. 다음 글에선 중단점(BreakPoint)에 대해 알아보겠습니다.
반응형
'Linux > Debugging & Testing' 카테고리의 다른 글
[gdb] The GNU Debugger : 3. Stack 정보 분석하기 (0) | 2018.08.15 |
---|---|
[gdb] The GNU Debugger : 2. 중단점 설정하기 (0) | 2018.08.14 |
[SOLVE] valgrind: failed to start tool 'memcheck' for platform... ': No such file or directory (0) | 2018.07.27 |
[valgrind] Memory debugging & profiling tool (0) | 2018.07.26 |
/Proc FileSystem - Kernel (0) | 2018.04.10 |