1. GDB를 이용한 디버깅
- l : 소스코드 출력
- finish : 함수 밖으로 나오는 명령어
- watch : 궁금한 함수를 break point 로 걸고 c를 이용해서 해당 라인까지 간 뒤에, l로 코드를 출력하서 watch point 로 궁금한 변수의 주소값들의 변화를 체크
- bt : 함수 콜 스택 확인
1. copy(tlpi-dist/fileio/copy)
- tui 옵션을 사용

2. fork(tlpi-dist/procexec/fork_whos_on_first)
- cgdb 사용

3. exec(tlpi-dist/procexec/t_execl)

4. pipe(tlpi-dist/pipes/simple_pipe)

2. VSCode를 이용한 디버깅
- code . : VSCode 디버거 실행
- .vscode 파일안에 launch.json 파일 생성
lauch.json 작성법
{
"version": "0.2.0",
"configurations": [
{
"name": "copy",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/fileio/copy",
"args": [
"${workspaceFolder}/fileio/copy",
"${workspaceFolder}/copy_new"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "t_fork",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/procexec/t_fork",
"args": [
"10",
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "fork_whos_on_first",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/procexec/fork_whos_on_first",
"args": [
"10",
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "make_zombie",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/procexec/make_zombie",
"args": [
"abc",
"def"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "multi_SIGCHLD",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/procexec/multi_SIGCHLD",
"args": [
"1",
"2",
"4"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "real_timer",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/timers/real_timer",
"args": [
"1",
"800000",
"1",
"0"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "ptmr_sigev_signal",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/timers/ptmr_sigev_signal",
"args": [
"2:5"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "simple_thread",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/threads/simple_thread",
"args": [
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "detached_attrib",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/threads/detached_attrib",
"args": [
"2:5"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "simple_pipe",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/pipes/simple_pipe",
"args": [
"input value",
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
1. copy

2. fork


3. exec

4. pipe

3. Toy 프로젝트용 launch.json 작성
- TOY 프로젝트를 vscode를 이용해서 디버깅 실습
- main 함수에 브레이크 포인트
1. lauch.json 코드
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"name": "toy_system",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/toy_system",
"args": [
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
2. 실행 모습
