[1. 개요]
리눅스 C++ application 디버깅 시, 유용한 툴 인 gdb 의 기초적인 사용 방법을 정리한다.
기본적으로 breakpoint 를 걸고, 한줄 단위로 실행해보기 위해서 디버깅 심볼들이 필요하다.
따라서, CMake 기준에서는
- 최적화를 많이 하는 Release 빌드 보다는 Debug 빌드가 적합하다.
아래와 같이, gdb 실행 시 심볼들을 찾을 수 없다는 메시지가 출력 된다.

g++ 로 직접 빌드하는 경우라면, -g 옵션을 사용하고, 최적화는 하지 않도록 한다.
[2. 기본적인 실행]
1 #include <iostream>
2
3 int sum(const int a, const int b)
4 {
5 const int aa = a*a;
6 const int bb = b*b;
7
8 return aa+bb;
9 }
10
11
12 int main(int argc, char** argv)
13 {
14 if (argc > 1) {
15 std::cout << argv[1] << std::endl;
16 }
17
18 std::cout << "Hello world" << std::endl;
19
20 const int result1 = sum(3, 4);
21 const int result2 = sum(4, 5);
22 const int result3 = sum(5, 6);
23 const int result4 = sum(6, 7);
24
25 std::cout << result1 << std::endl;
26 std::cout << result2 << std::endl;
27 std::cout << result3 << std::endl;
28 std::cout << result4 << std::endl;
29
30
31 return 0;
32 }
CMake 기준 위 코드를 Debug 로 빌드한다. (실행파일 이름은 Mydbg 라 가정한다.)
$ gdb Mydbg

(gdb) run abcd
command : r
- 디버깅 시작.
- run
- run <arg1> <arg2> ...
(gdb)
[3. 정리]
$gdb <exe>
(gdb) r
- run
- r <arg1> <arg2> ...
(gdb) b
- break
- b <함수이름> #함수 이름만 명시...
- break <파일이름:라인넘버>
- break <파일이름:함수이름>
(gdb) info
- info break
(gdb) n
- next
- 한줄 실행 (step over)
(gdb) s
- step
- 한줄 실행 (step into)
(gdb) q
- quit
- 종료
(gdb) p
- print <변수명>
(gdb) c
- continue
- 다음 breakpoint 까지 실행
(gdb) d
- delete # 모든 breakpoint 를 삭제
- delete <번호> # breakpoint 번호에 해당하는 breakpoint 만 삭제
(gdb) display
- display <변수명> # print 와 달리, 해당 변수를 계속 출력
'C++ > g++' 카테고리의 다른 글
정적 라이브러리 생성 및 링킹.. (0) | 2024.10.15 |
---|---|
정적 라이브러리 빌드 (0) | 2023.07.05 |
컴파일 링커 옵션 (0) | 2023.04.17 |