[Rust] panic

panic์€ Rust์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ˆ˜๋‹จ ์ค‘ ํ•˜๋‚˜๋‹ค.
์ •ํ™•ํžˆ๋Š” ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋„์˜ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ถœํ• ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.




๊ธฐ๋ณธ ์›๋ฆฌ

rust์˜ panic์€ ์—ฌํƒ€ ์–ธ์–ด๋“ค์˜ try-catch์™€๋„ ์œ ์‚ฌํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.
panic์ด ๋ฐœ์ƒํ•˜๋ฉด rust๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ์„ ๊ฑฐ๊พธ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์Šคํƒ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ข…๋ฃŒํ•œ๋‹ค.
์ด ์ž‘์—…์„ unwind๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋Œ€์ถฉ ์ด๋ ‡๋‹ค.
unwind๋กœ ๋๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ”๋Š”๋ฐ๋„ ๋ญ๊ฐ€ ์—†๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๊ทธ๋Œ€๋กœ ๊ฐ•์ œ ์ข…๋ฃŒ๋œ๋‹ค.




๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจ๋‹‰์€ ์ „์šฉ ๋งคํฌ๋กœ panic!์„ ํ†ตํ•ด์„œ ๋ฐ”๋กœ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฑด ํŠน์ˆ˜ํ•˜๊ฒŒ ์ •์˜๋œ ๋นŒํŠธ์ธ ํŒจ๋‹‰ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฆ‰์‹œ ํ˜ธ์ถœํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜๋Œ€๋กœ panic unwind๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ panic trace๋ฅผ ์ฐ๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘๋‹จ์‹œํ‚จ๋‹ค.




panic ์žก๊ธฐ

ํ•˜์ง€๋งŒ panic๋„ ํ•„์š”ํ•˜๋‹ค๋ฉด try-catch์ฒ˜๋Ÿผ ๋ฐ›์•„์„œ ํ”„๋กœ๊ทธ๋žจ์ด ํ„ฐ์ง€์ง€ ์•Š๋„๋ก ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

catch_unwind๋ผ๋Š” ํ•จ์ˆ˜์— ํด๋กœ์ €๋กœ ๊ฐ์‹ธ์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ์‹คํ–‰์‹œํ‚ค๋ฉด, ๋‚ด๋ถ€์—์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์˜ค๋ฅ˜๋ฅผ Result๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.


์ด๋Ÿฐ ์‹์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.
panic trace๋Š” ์ž๋™์œผ๋กœ ์ฐํžˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ๋Š” ๋ฌด์‹œํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

์ด์ฒ˜๋Ÿผ try-catch์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ธด ํ•œ๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ํ˜•ํƒœ๋Š” ์•„๋‹ˆ๋‹ค.
์ด๊ฑด ํ˜น์‹œ๋‚˜ ๋ชจ๋ฅผ ํŒจ๋‹‰ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฐ€์šฉ์„ฑ์„ ์ฑ™๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ, ์ตœ์ƒ์œ„๋ ˆ๋ฒจ์—์„œ ๋ณดํ—˜์šฉ์œผ๋กœ ๊น”์•„์ฃผ๋Š” ์šฉ๋„๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ์ด์ •๋„๋Š” ๊น”์•„์ค˜์•ผ ํ•œ๋‹ค.




thread์™€ panic

๋‹คํ–‰ํžˆ๋„ rust์—์„œ๋Š” ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๊ทธ ์Šค๋ ˆ๋“œ๋งŒ ๋ป—๊ณ  trace๋ฅผ ์ฐ์„ ๋ฟ์ด๋‹ค.


๋Œ€์‹  join ๊ฐ™์€ ๊ฒƒ์ด ์‹คํŒจํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  thread๊ฐ€ ๋ป—์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•œ mutex๊ฐ€ ๊ณ ์žฅ๋‚  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.
์ด๊ฑธ ์ค‘๋…๋˜์—ˆ๋‹ค.(poisoned)๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ์ด ์ƒํƒœ๋กœ lock์„ ์–ป์œผ๋ฉด ์‹คํŒจํ•œ๋‹ค.


๊ทธ๋ž˜๋„ ์˜ˆ์ „์—๋Š” mutex๊ฐ€ ํ•œ๋ฒˆ poison์— ๊ฑธ๋ฆฌ๋ฉด ๋ป‘๊ฐ€์„œ ๋ณต๊ตฌํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” clear_poison์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.




panic unwind ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ

panic์ด ๋ฐœ์ƒํ•˜๋ฉด rust๋Š” unwind๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋งˆ์ € ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋นŒ๋“œ ์˜ต์…˜์— panic = 'abort'๋ฅผ ๋„ฃ์œผ๋ฉด panic unwind์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ๋Š” ์ž์ฒด ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ OS๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์งฌ์„ ๋•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

์ž„๋ฒ ๋””๋“œ ๊ฐ™์€ ์ปดํŒฉํŠธํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ๊ธˆ์ด๋ผ๋„ ๋” ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ฝ๊ฐ„์˜ ํŽธ์˜์„ฑ์„ ํฌ์ƒํ•˜๋”๋ผ๋„ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ํƒํ•  ๋•Œ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด ์ด์ œ catch_unwind ๊ฐ™์€ ๊ฒƒ๋„ ๋จนํžˆ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.




์ž์—ฐ์ ์ธ panic ์ƒํ™ฉ

panic์€ panic! ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋‚˜, ๊ทธ๊ฑธ ์‚ฌ์šฉํ•˜๋Š” .unwrap() ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์„ ํ†ตํ•ด์„œ๋„ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ๊ธฐ๋ณธ ์‹ ํƒ์Šค ์ˆ˜์ค€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํŒจ๋‹‰๋„ ๋ช‡๊ฐ€์ง€ ์žˆ๋‹ค.


๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ ๋ฐฐ์—ด์˜ out of range ์˜ค๋ฅ˜๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐธ์กฐ ์‹œ๋„ํ•˜๋ฉด ๋ฐ”๋กœ ํŒจ๋‹‰์ด ํ„ฐ์ง„๋‹ค.
์•ˆ์ „ํ•œ ์ ‘๊ทผ์„ ์›ํ•œ๋‹ค๋ฉด .get ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


Rust์—์„œ๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ์–ธ๋”ํ”Œ๋กœ๋„ ํŒจ๋‹‰์„ ์œ ๋ฐœํ•œ๋‹ค.
์ •์  ๋ถ„์„์œผ๋กœ ๊ฐ์ง€๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ปดํŒŒ์ผ ์ˆ˜์ค€์—์„œ ๊ฑธ๋Ÿฌ์ง€์ง€๋งŒ, ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋Ÿฐํƒ€์ž„ ํŒจ๋‹‰์ด๋‹ค.
์ด๋Ÿฐ๊ฑธ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด .wrapping_add ๊ฐ™์€ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ณดํ˜ธ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.


์ˆซ์ž๋ฅผ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„ ๊ธฐ๋ณธ ํŒจ๋‹‰์— ์†ํ•œ๋‹ค.
์ด๊ฑด ๋‹น์—ฐํžˆ ์•Œ์•„์„œ ์ž˜ ํ”ผํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ๊ฑฐ ํ—ˆ์šฉํ•˜๋Š” ์–ธ์–ด๋Š” ๋“œ๋ฌผ๋‹ค.



์ฐธ์กฐ
https://doc.rust-lang.org/book/ch09-01-unrecoverable-errors-with-panic.html
https://doc.rust-lang.org/std/macro.panic.html
https://doc.rust-lang.org/nomicon/unwinding.html