Study: ComputerScience(CS)/CS: Linux
[Linux] gdb๋ก process/threads ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ(feat. ์ข๋น ํ๋ก์ธ์ค)
DrawingProcess
2022. 10. 25. 16:03
๋ฐ์ํ
๐ก ๋ณธ ๋ฌธ์๋ 'gdb๋ฅผ ํ์ฉํ ์คํ ์ค์ธ ํ๋ก์ธ์ค & ์ค๋ ๋ ๋๋ฒ๊น ํ๊ธฐ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
๋ฑํ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ ๊ฒ์ ์๋๋ฐ ๊ณผ๋ํ๊ฒ cpu๋ฅผ ์ก๊ณ ์๊ฑฐ๋(ํน์ ์ค๋ ๋ ๋ฌดํ๋ฃจํ), ํ๋ก์ธ์ค๊ฐ ์ด์๋ ์์ง๋ง ์๋ฌด๋ฐ ์๋ต์ ํ์ง ์๋(๋ฐ๋๋ฝ) ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํน์ ์ด๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ gdb ๋๋ฒ๊ฑฐ๋ฅผ ์ด์ฉํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ง์ ๋ถ์ด ํ์ฌ ์ํ๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. ์ค๋ ๋/ํ๋ก์ธ์ค ์ํ ํ์ธํ๊ธฐ
$ ps -eLf | grep <process name>
UID PID PPID LWP C NLWP STIME TTY TIME CMD
kukuta 11048 1 11048 0 8 10:52 pts/0 00:00:00 <process name>
kukuta 11048 1 11050 1 8 10:52 pts/0 00:00:27 <process name>
kukuta 11048 1 11051 0 8 10:52 pts/0 00:00:19 <process name>
kukuta 11048 1 11052 0 8 10:52 pts/0 00:00:19 <process name>
kukuta 11048 1 11053 0 8 10:52 pts/0 00:00:00 <process name>
kukuta 11048 1 11054 0 8 10:52 pts/0 00:00:00 <process name>
kukuta 11048 1 11055 0 8 10:52 pts/0 00:00:00 <process name>
kukuta 11048 1 11056 0 8 10:52 pts/0 00:00:00 <process name>
- ps์ e ์ต์ ์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์ถ๋ ฅ, L์ ์ค๋ ๋ ์ํ, f๋ ์ถ๋ ฅํ ์ ์๋ ๋ชจ๋ ๋ด์ฉ์ ์ถ๋ ฅํ๋ผ๋ ์๋ฏธ์ ๋๋ค.
- ์ฌ๊ธฐ์, LWP(Light Weight Process) ์นผ๋ผ์ Thread ID๋ฅผ ๋ํ๋ด๋ ๊ฒ์ ๋๋ค.
2. ์คํ ์ค์ธ ํ๋ก์ธ์ค ์ ๊ทผํ๊ธฐ
2.1 ์คํ์ค์ธ ํ๋ก์ธ์ค์ gdb ๋ก ์ ๊ทผํ๊ธฐ(Attaching 'gdb' on running process)
$ gdb -p <pid>
- ๋ง์ผ ์คํ ๊ถํ์ด ์ถฉ๋ถ์น ์๋ค๋ ์๋ฌ ๋ฉ์์ง๊ฐ ๋์ค๋ฉด sudo๋ก ์คํํด์ผ ํฉ๋๋ค.
2.2 ์ค๋ ๋์ ์ํ ๋ณด๊ธฐ
(gdb) info threads
โโId Target Id Frame
โโ8 Thread 0x7f0ec8fcc700 (LWP 11050) "<process name>" 0x00007f0ecdb81dbd in nanosleep () from /lib/x86_64-linux-gnu/libc.so.6
โโ7 Thread 0x7f0ec3fff700 (LWP 11051) "<process name>" 0x00007f0ecdbb69b3 in epoll_wait () from /lib/x86_64-linux-gnu/libc.so.6
โโ6 Thread 0x7f0ec37fe700 (LWP 11052) "<process name>" 0x00007f0ecdbb69b3 in epoll_wait () from /lib/x86_64-linux-gnu/libc.so.6
โโ5 Thread 0x7f0ec2ffd700 (LWP 11053) "<process name>" 0x00007f0ecdbb69b3 in epoll_wait () from /lib/x86_64-linux-gnu/libc.so.6
โโ4 Thread 0x7f0ec27fc700 (LWP 11054) "<process name>" 0x00007f0ecee09d84 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
โโ3 Thread 0x7f0ec1ffb700 (LWP 11055) "<process name>" 0x00007f0ecee09d84 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
โโ2 Thread 0x7f0ec17fa700 (LWP 11056) "<process name>" 0x00007f0ecee09d84 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
* 1 Thread 0x7f0ecf67db00 (LWP 11048) "<process name>" 0x00007f0ecee09d84 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
2.3 ๋ชจ๋ ์ค๋ ๋๋ค์ ํธ์ถ ์คํ ๋ณด๊ธฐ
(gdb) thread apply all bt
2.4 ๋๋ฒ๊ฑฐ๊ฐ ๋ถ์ด ์๋ ์ค๋ ๋ ๋ณ๊ฒฝํ๊ธฐ
(gdb) thread <tid>
2.5 ์ค๋ ๋์ ํธ์ถ ์คํ ๋ณด๊ธฐ
(gdb) bt
์ฐธ๊ณ
- [stackoverflow] how-to-attach-a-process-in-gdb: http://stackoverflow.com/questions/14370972/how-to-attach-a-process-in-gdb
- [Tistory] gdb - ์คํ ์ค์ธ ํ๋ก์ธ์ค & ์ค๋ ๋ ๋๋ฒ๊น ํ๊ธฐ: https://kukuta.tistory.com/202
- gdb - breakpoint: http://kukuta.tistory.com/163
- GDB Tutorial: http://kukuta.tistory.com/3
๋ฐ์ํ