์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ด€๋ฌผ: C++

C++

C ++์—์„œ ์˜ˆ์™ธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹ (๋’ค์—์„œ) ๋ฌผ์–ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜ˆ์™ธ๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ• ์ง€,

์‚ฌ๋žŒ๋“ค์ด ์˜ˆ์™ธ๊ฐ€ ๋А๋ฆฌ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ๊ณ„์† ๋ณด์ง€๋งŒ ์ฆ๊ฑฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ๊ฐ€ ์žˆ๋Š”์ง€ ๋ฌป๋Š” ๋Œ€์‹  ์˜ˆ์™ธ๊ฐ€ ๋ฐฐํ›„์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ฌผ์–ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜ˆ์™ธ๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ• ์ง€, ๋А๋ฆฐ ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•„๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์˜ˆ์™ธ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๊ฐ ๋ฐ˜ํ™˜ ํ›„์— ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š”์ง€ ์ค‘์ง€ํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋‚ฉ ์ค‘์ง€์‹œ๊ธฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ์™ธ ์œ ํ˜•๊ณผ ์Šคํƒ ์œ„์น˜๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ์Šคํƒ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ์ด ๋‘ ๋ฒˆ์งธ ์Šคํƒ์ด ๊ฑด ๋“œ๋ฆฌ๋Š” ์œ ์ผํ•œ ์‹œ๊ฐ„์ด ๋˜์ง€๊ธฐ์™€ ๊ฐ ์‹œ๋„ / ์žก๊ธฐ ๋•Œ๋ผ๊ณ  ์ถ”์ธกํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ„ด ์ฝ”๋“œ๋กœ ์œ ์‚ฌํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” AFAICT๋Š” ๋™์ผํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ชจ๋‘ ์ถ”์ธก ์ผ ๋ฟ์ด๋ฏ€๋กœ ์‹ค์ œ๋กœ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์˜ˆ์™ธ๋Š” ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?



๋‹ต๋ณ€

์ถ”์ธกํ•˜๋Š” ๋Œ€์‹ ์— ์ €๋Š” ์ž‘์€ C ++ ์ฝ”๋“œ์™€ ์•ฝ๊ฐ„ ์˜ค๋ž˜๋œ Linux ์„ค์น˜๋กœ ์ƒ์„ฑ ๋œ ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‚ดํŽด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

class MyException
{
public:
    MyException() { }
    ~MyException() { }
};

void my_throwing_function(bool throwit)
{
    if (throwit)
        throw MyException();
}

void another_function();
void log(unsigned count);

void my_catching_function()
{
    log(0);
    try
    {
        log(1);
        another_function();
        log(2);
    }
    catch (const MyException& e)
    {
        log(3);
    }
    log(4);
}

๋กœ ์ปดํŒŒ์ผ g++ -m32 -W -Wall -O3 -save-temps -cํ•˜๊ณ  ์ƒ์„ฑ ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ ํŒŒ์ผ์„ ์‚ดํŽด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    .file   "foo.cpp"
    .section    .text._ZN11MyExceptionD1Ev,"axG",@progbits,_ZN11MyExceptionD1Ev,comdat
    .align 2
    .p2align 4,,15
    .weak   _ZN11MyExceptionD1Ev
    .type   _ZN11MyExceptionD1Ev, @function
_ZN11MyExceptionD1Ev:
.LFB7:
    pushl   %ebp
.LCFI0:
    movl    %esp, %ebp
.LCFI1:
    popl    %ebp
    ret
.LFE7:
    .size   _ZN11MyExceptionD1Ev, .-_ZN11MyExceptionD1Ev

_ZN11MyExceptionD1Ev์ด๋‹ค MyException::~MyException()์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ๋ฉธ์ž์˜ ์ธ๋ผ์ธ์ด ์•„๋‹Œ ์‚ฌ๋ณธ์„ ํ•„์š”๋กœ ๊ฒฐ์ •, ๊ทธ๋ž˜์„œ.

.globl __gxx_personality_v0
.globl _Unwind_Resume
    .text
    .align 2
    .p2align 4,,15
.globl _Z20my_catching_functionv
    .type   _Z20my_catching_functionv, @function
_Z20my_catching_functionv:
.LFB9:
    pushl   %ebp
.LCFI2:
    movl    %esp, %ebp
.LCFI3:
    pushl   %ebx
.LCFI4:
    subl    $20, %esp
.LCFI5:
    movl    $0, (%esp)
.LEHB0:
    call    _Z3logj
.LEHE0:
    movl    $1, (%esp)
.LEHB1:
    call    _Z3logj
    call    _Z16another_functionv
    movl    $2, (%esp)
    call    _Z3logj
.LEHE1:
.L5:
    movl    $4, (%esp)
.LEHB2:
    call    _Z3logj
    addl    $20, %esp
    popl    %ebx
    popl    %ebp
    ret
.L12:
    subl    $1, %edx
    movl    %eax, %ebx
    je  .L16
.L14:
    movl    %ebx, (%esp)
    call    _Unwind_Resume
.LEHE2:
.L16:
.L6:
    movl    %eax, (%esp)
    call    __cxa_begin_catch
    movl    $3, (%esp)
.LEHB3:
    call    _Z3logj
.LEHE3:
    call    __cxa_end_catch
    .p2align 4,,3
    jmp .L5
.L11:
.L8:
    movl    %eax, %ebx
    .p2align 4,,6
    call    __cxa_end_catch
    .p2align 4,,6
    jmp .L14
.LFE9:
    .size   _Z20my_catching_functionv, .-_Z20my_catching_functionv
    .section    .gcc_except_table,"a",@progbits
    .align 4
.LLSDA9:
    .byte   0xff
    .byte   0x0
    .uleb128 .LLSDATT9-.LLSDATTD9
.LLSDATTD9:
    .byte   0x1
    .uleb128 .LLSDACSE9-.LLSDACSB9
.LLSDACSB9:
    .uleb128 .LEHB0-.LFB9
    .uleb128 .LEHE0-.LEHB0
    .uleb128 0x0
    .uleb128 0x0
    .uleb128 .LEHB1-.LFB9
    .uleb128 .LEHE1-.LEHB1
    .uleb128 .L12-.LFB9
    .uleb128 0x1
    .uleb128 .LEHB2-.LFB9
    .uleb128 .LEHE2-.LEHB2
    .uleb128 0x0
    .uleb128 0x0
    .uleb128 .LEHB3-.LFB9
    .uleb128 .LEHE3-.LEHB3
    .uleb128 .L11-.LFB9
    .uleb128 0x0
.LLSDACSE9:
    .byte   0x1
    .byte   0x0
    .align 4
    .long   _ZTI11MyException
.LLSDATT9:

๋†€๋ผ๋‹ค! ์ผ๋ฐ˜ ์ฝ”๋“œ ๊ฒฝ๋กœ์—๋Š” ์ถ”๊ฐ€ ์ง€์นจ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•จ์ˆ˜ ๋์—์žˆ๋Š” ํ…Œ์ด๋ธ” (์‹ค์ œ๋กœ๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ ๋ณ„๋„ ์„น์…˜์— ์žˆ์Œ)์„ ํ†ตํ•ด ์ฐธ์กฐ๋˜๋Š” ์ถ”๊ฐ€ ๋ผ์ธ ์™ธ๋ถ€ ์ˆ˜์ • ์ฝ”๋“œ ๋ธ”๋ก์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์€ ์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ” ( _ZTI11MyExceptionis typeinfo for MyException)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค .

์ข‹์•„, ๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋‚˜์—๊ฒŒ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹ˆ์—ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ์ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ ์ถœ๋ ฅ์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

    .text
    .align 2
    .p2align 4,,15
.globl _Z20my_throwing_functionb
    .type   _Z20my_throwing_functionb, @function
_Z20my_throwing_functionb:
.LFB8:
    pushl   %ebp
.LCFI6:
    movl    %esp, %ebp
.LCFI7:
    subl    $24, %esp
.LCFI8:
    cmpb    $0, 8(%ebp)
    jne .L21
    leave
    ret
.L21:
    movl    $1, (%esp)
    call    __cxa_allocate_exception
    movl    $_ZN11MyExceptionD1Ev, 8(%esp)
    movl    $_ZTI11MyException, 4(%esp)
    movl    %eax, (%esp)
    call    __cxa_throw
.LFE8:
    .size   _Z20my_throwing_functionb, .-_Z20my_throwing_functionb

์—ฌ๊ธฐ์— ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ณ  ์žก๋Š” ๋ฐ์—๋Š” ๋ถ„๋ช…ํžˆ ๋งŽ์€ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ๋‹ค์Œ __cxa_throw์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์˜ˆ์™ธ ํ…Œ์ด๋ธ”์˜ ๋„์›€์œผ๋กœ ์Šคํƒ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.
  • ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์— ๋„๋‹ฌ ํ•  ๋•Œ๊นŒ์ง€ ์Šคํƒ์„ ํ‘ธ์‹ญ์‹œ์˜ค.
  • ์‹ค์ œ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

๊ฐ’์„ ๋‹จ์ˆœํžˆ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋น„์šฉ๊ณผ ๋น„๊ตํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ์˜ˆ์™ธ์  ์ธ ๋ฐ˜ํ™˜์—๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„๋ฃŒํ•˜๋ ค๋ฉด ๋‚˜๋จธ์ง€ ์–ด์…ˆ๋ธ”๋ฆฌ ํŒŒ์ผ :

    .weak   _ZTI11MyException
    .section    .rodata._ZTI11MyException,"aG",@progbits,_ZTI11MyException,comdat
    .align 4
    .type   _ZTI11MyException, @object
    .size   _ZTI11MyException, 8
_ZTI11MyException:
    .long   _ZTVN10__cxxabiv117__class_type_infoE+8
    .long   _ZTS11MyException
    .weak   _ZTS11MyException
    .section    .rodata._ZTS11MyException,"aG",@progbits,_ZTS11MyException,comdat
    .type   _ZTS11MyException, @object
    .size   _ZTS11MyException, 14
_ZTS11MyException:
    .string "11MyException"

typeinfo ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

    .section    .eh_frame,"a",@progbits
.Lframe1:
    .long   .LECIE1-.LSCIE1
.LSCIE1:
    .long   0x0
    .byte   0x1
    .string "zPL"
    .uleb128 0x1
    .sleb128 -4
    .byte   0x8
    .uleb128 0x6
    .byte   0x0
    .long   __gxx_personality_v0
    .byte   0x0
    .byte   0xc
    .uleb128 0x4
    .uleb128 0x4
    .byte   0x88
    .uleb128 0x1
    .align 4
.LECIE1:
.LSFDE3:
    .long   .LEFDE3-.LASFDE3
.LASFDE3:
    .long   .LASFDE3-.Lframe1
    .long   .LFB9
    .long   .LFE9-.LFB9
    .uleb128 0x4
    .long   .LLSDA9
    .byte   0x4
    .long   .LCFI2-.LFB9
    .byte   0xe
    .uleb128 0x8
    .byte   0x85
    .uleb128 0x2
    .byte   0x4
    .long   .LCFI3-.LCFI2
    .byte   0xd
    .uleb128 0x5
    .byte   0x4
    .long   .LCFI5-.LCFI3
    .byte   0x83
    .uleb128 0x3
    .align 4
.LEFDE3:
.LSFDE5:
    .long   .LEFDE5-.LASFDE5
.LASFDE5:
    .long   .LASFDE5-.Lframe1
    .long   .LFB8
    .long   .LFE8-.LFB8
    .uleb128 0x4
    .long   0x0
    .byte   0x4
    .long   .LCFI6-.LFB8
    .byte   0xe
    .uleb128 0x8
    .byte   0x85
    .uleb128 0x2
    .byte   0x4
    .long   .LCFI7-.LCFI6
    .byte   0xd
    .uleb128 0x5
    .align 4
.LEFDE5:
    .ident  "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
    .section    .note.GNU-stack,"",@progbits

๋” ๋งŽ์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ…Œ์ด๋ธ” ๋ฐ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€ ์ •๋ณด.

๋”ฐ๋ผ์„œ ์ ์–ด๋„ Linux์˜ GCC์— ๋Œ€ํ•œ ๊ฒฐ๋ก ์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ถ”๊ฐ€ ๊ณต๊ฐ„ (์ฒ˜๋ฆฌ๊ธฐ์™€ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ)๊ณผ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ…Œ์ด๋ธ”์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ถ”๊ฐ€ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋Œ€์‹  ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋“œ๋ฌผ๋‹ค๋ฉด ๋” ์ด์ƒ ์˜ค๋ฅ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๋” ๋งŽ์€ ์ •๋ณด, ํŠนํžˆ ๋ชจ๋“  __cxa_๊ธฐ๋Šฅ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์›๋ž˜ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.


๋‹ต๋ณ€

์˜ˆ์ „์—๋Š” ๋А๋ฆฐ ์˜ˆ์™ธ ๊ฐ€ ์‚ฌ์‹ค ์ด์—ˆ์Šต๋‹ˆ๋‹ค .
๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ด๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์˜ˆ์™ธ๊ฐ€ ์žˆ๋‹ค๊ณ ํ•ด์„œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ˆ˜์ •์„ ์œ„ํ•ด ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์˜ˆ์™ธ ์‚ฌ์šฉ : ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ •์ฑ…์„ ์ด๋„๋Š” ์›์น™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ์™ธ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์˜ ๋น„์šฉ์€ ๊ฑฐ์˜ 0์ž…๋‹ˆ๋‹ค.

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ถ€ ์ž‘์—…์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜์ด๋ฅผ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ์ง€์ ๊นŒ์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜๋Š” ๋น„์šฉ๊ณผ ๋น„๊ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ดˆ๋ณด์ž๋ฅผ์œ„ํ•œ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ์ž‘์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์•ˆ์— ๋งŽ์€ ๊ฒƒ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ˆ์™ธ ๊ฐœ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋น„์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • ์˜ˆ์™ธ์— ์ถ”๊ฐ€ ํ•ญ๋ชฉ์„ ๋„ฃ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • const ์ฐธ์กฐ๋กœ ์žก์•„๋ผ.

์ œ ์ƒ๊ฐ์—๋Š” ์˜ˆ์™ธ๊ฐ€์žˆ๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์™ธ๊ฐ€์—†๋Š” ์ฝ”๋“œ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๊ฑฐ๋‚˜ ์ ์–ด๋„ ์˜ˆ์™ธ๊ฐ€์—†๋Š” ์ฝ”๋“œ๋งŒํผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ์˜ค๋ฅ˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ชจ๋“  ์ถ”๊ฐ€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Œ). ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ์— ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค (์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‚ฌ๋žŒ๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค).


๋‹ต๋ณ€

์˜ˆ์™ธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ OS์˜ ์ผ๋ถ€ ๊ธฐ๋ณธ ์ง€์›์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ ์ด๊ฒƒ์€ ๊ตฌ์กฐํ™” ๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

Code Project : C ++ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์™ธ์˜ ์˜ค๋ฒ„ ํ—ค๋“œ๋Š” ์˜ˆ์™ธ๊ฐ€ ํ•ด๋‹น ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์ „ํŒŒ๋˜๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ ์Šคํƒ ํ”„๋ ˆ์ž„ (๋˜๋Š” ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋ฒ”์œ„)์—์„œ ์–ด๋–ค ๊ฐœ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œ์ผœ์•ผํ•˜๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ์†Œ๋ฉธ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์Šคํƒ์—์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์— ํ•œ ์ˆ˜์ค€์˜ ์Šคํƒ ๋งŒ ํ•ด์ œ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐ˜๋ฉด, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ค‘๊ฐ„ ์Šคํƒ ํ”„๋ ˆ์ž„์—์„œ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์ด์—†๋Š” ๊ฒฝ์šฐ ํ•œ ๋ฒˆ์˜ ์ž‘์—…์œผ๋กœ ์Šคํƒ ์•„๋ž˜๋กœ ํ›จ์”ฌ ๋” ๋’ค๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ต๋ณ€

Matt Pietrek๋Š” Win32 Structured Exception Handling ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด ๊ธฐ์‚ฌ๋Š” ์›๋ž˜ 1997 ๋…„์— ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์˜ค๋Š˜๋‚ ์—๋„ ์—ฌ์ „ํžˆ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค (๋ฌผ๋ก  Windows์—๋งŒ ์ ์šฉ๋จ).


๋‹ต๋ณ€

์ด ๊ธฐ์‚ฌ ๋Š” ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋น„์šฉ์ด ์ƒ๋‹นํžˆ ๋‚ฎ์ง€ ๋งŒ ์‹ค์ œ๋กœ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ๊ธฐ์‚ฌ, ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.


๋‹ต๋ณ€

๋‚ด ์นœ๊ตฌ๊ฐ€ ๋ช‡ ๋…„ ์ „์— Visual C ++์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ฝ๊ฐ„ ์ผ์Šต๋‹ˆ๋‹ค.

http://www.xyzw.de/c160.html


๋‹ต๋ณ€

๋ชจ๋“  ์ข‹์€ ๋Œ€๋‹ต.

๋˜ํ•œ, ์ฝ”๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ฉ”์†Œ๋“œ ์ƒ๋‹จ์—์„œ ๊ฒŒ์ดํŠธ๋กœ โ€˜if checksโ€™๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด ์ง€ ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค.

์ œ ์ขŒ์šฐ๋ช…์€ ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋ณด๋Š” ๋‹ค์Œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” 9 ๊ฐœ์›” ์•ˆ์— ๋‹น์‹ ์ด๊ณ , ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์ด๋ฆ„์„ ์ €์ฃผํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค!


์ด ๊ธ€์€ C++ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ถ„๋ฅ˜๋˜์—ˆ๊ณ  ๋‹˜์— ์˜ํ•ด ์— ์ž‘์„ฑ๋์Šต๋‹ˆ๋‹ค.