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

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•