728x90

프로그램이 에러로 인해 죽는다거나 했을 때 감지하는 방법이 없을까하고 찾다보니 

c++의 signal을 이용하면 가능한 것을 확인했다.

 

#include <iostream>
#include <csignal>
#include <thread>

using namespace std;
using namespace std::literals::chrono_literals;

void signalHandler(int signum)
{
    cout << "interrupt signal (" << signum << ") received. \n";
}

int main()
{
    signal(SIGSEGV, signalHandler); // segment violation
    
    while(1)
    {
        cout << "sleep..." << endl;
        std::this_thread::sleep_for(1ms);
        
        static int count = 0;
        ++count;
        
        if (count > 100)
        {
            struct n
            {
                int a;
            }
            
            n* nn = nullptr;
            printf("int a : %d \n", nn->a); // nullptr 참조 후 프로그램 죽음.
        }
    }
}

 

결과

 

ref : http://seorenn.blogspot.com/2011/02/sigsegv.html

728x90

+ Recent posts