2014-07-19 4 views
0

아마도 xs를 사용하여 랩핑 된 일부 C++ 라이브러리를 사용하는 Perl 스크립트가 있습니다. 라이브러리가 예외를 throw하면 eval에서 호출 된 경우에도 내 Perl 스크립트가 손상됩니다. 예외를 건너 뛰고 스크립트가 충돌하지 않도록하려면 어떻게해야합니까?C++ 예외로 인해 Perl 스크립트가 손상되지 않도록하십시오.

terminate called after throwing an instance of 'blaException' 
    what(): blablabla.cpp:202: Failed to bla 
Abort trap: 6 (core dumped) 

펄 버전 v5.12.4

답변

1

당신은 할 수 있습니다. 코어 덤프는 치명적이므로 그 시점에서 게임 오버가 발생합니다. 적절한 해결책은 코드가 충돌하지 않도록하는 것이지만 C++ 라이브러리를 제어 할 수 없다면 어렵게 될 것입니다.

아마도 라이브러리에 전화를 걸기 전에 스크립트를 포크로하여 해결 방법을 시도 할 수 있습니다. 충돌이 발생하면 다시 시작하지만, 프로덕션 환경에서는 어디에서나 사용할 수 있습니다.

+0

C++ -> XS -> Perl 호출 스택의 어느 부분에서 "종료"/ "중단 트랩"이 수행됩니까? XS에서 예외를 잡아서 Perl 호환 객체로 다시 던져야합니까? –

+1

문제는 Perl 측의 신호를 통해 도달해야합니다. http://perltricks.com/article/37/2013/8/18/Catch-and-Handle-Signals-in-Perl – Leeft