함수 호출 및 show_self의 제한사항은
다음과 같습니다.
- exec()를 호출할 수 없습니다.
- 스레드 또는 프로세스를 종료할 수 없습니다.
- 신호를 발생시킬 수 없습니다.
- longjmp()의 대상이 함수 내에 있어야 longjmp()를
호출할 수 있습니다.
- 함수 내에서 예외가 처리되지 않는 한 C++ 예외를
발생시킬 수 없습니다.
- 적절한 시간 내에 종료해야 합니다. 이는
DER_DBG_SHOWSELF_TIMEOUT 환경 변수로 제어할 수 있습니다. 기본값은
10초입니다.
- 멀티스레드된 응용프로그램에서 함수는 - 및 해당 함수에서 실행되는
스레드에 대해 가정할 수 없으며 프로세스의 기타 모든 스레드가
일시중단되었다고 가정해야 합니다. 특히 다음과 같은 경우에 이 내용이 적용됩니다.
- 다른 스레드에 의존할 수 없으며 다른 스레드에
필수 자원이 있다고 가정해야 합니다. 특히, pthread_mutex_lock()을 호출하면
함수가 정지될 수 있습니다.
- 일부 C/C++ 라이브러리 함수를 다시 진입할 수 없습니다. 메모리 할당 및 입출력(I/O) 함수를 포함하여
libc.a에 있는 많은 스레드로부터 안전하게 보호되는 함수를
다시 진입할 수 없습니다. 이 함수를 연속적으로 재사용할 수 있습니다. 이러한 함수는
pthread_mutex_lock()을 사용하여 연속적으로 재사용할 수 있도록 하므로
이 함수를 호출하면 디버그 세션이 중지될 가능성이 적습니다.
- 함수로 인한 디버그할 프로세스의 글로벌 상태의 모든 변경 내용은
함수를 리턴한 후에도 계속됩니다.
- pthread_create() 호출의 영향은 정의되지 않았습니다.
디버거가 이러한 제한사항이 일치하지 않는 함수를 복구하려고
시도합니다. 하지만 디버그될 응용프로그램의 상태가
다시 변경된다고 보장할 수 없습니다.