상황은 다음과 같습니다. 스레드 A는 예외를 캐치하고 예외 필터의 GetExceptionInformation을 사용하여 메모리의 어딘가에 예외 데이터를 저장 한 후 스레드 B는 해당 예외 정보를 가져 와서 다시 전달하려고합니다. 하지만 문제는 스레드 B가 catch 된 예외를 rethrows 때 예외로 이어지는 원래 호출 스택이 누락되었습니다.
어떻게 원래 호출 스택을 잃지 않고 예외를 다시 throw 할 수 있습니까? (이 질문은 C++에 관한 것임을 참고하십시오).어떻게 원래 호출 스택을 잃지 않고 예외를 다시 게시합니까?
답변
catch 블록에서 스택을 풀어서 재사용중인 예외의 일부로 저장할 수 있습니다. C++에서 스택을 unwinding하는 것은 약간 까다 롭습니다. 그러나 예를 들어 WxWidgets과 함께 제공되는 크래시 덤프 콜렉터 코드를 자세히 살펴볼 수 있습니다.
내 경우에는 완전히 실용적이지는 않지만 대답으로 표시 –
질문은 "수신"스레드에 스택을 전달해야하는 이유는 무엇입니까?
기본적으로 일부 오류 로그에보고하기 위해 스택이 필요하다고 가정합니다. 잡기 스레드에서 스택을 걸거나 미니 덤프를 생성하거나 수집 할 오류 정보를 생성 한 다음 예외 사본 (가능한 경우 조각화에주의하십시오)을 수신 스레드로 전달할 수 있습니다.
포크 - 조인 루틴의 일종으로 잡힌 예외. 그래서 예외가 일부 작업자 스레드에서 던져지면 주 스레드로 전달하고 거기에 다시 던지기를 원합니다. (+ 원래 스택을 잃고 싶지 않습니다.) –
- 1. github에서 작업을 잃지 않고 어떻게 마스터로 다시 병합합니까?
- 2. 프로젝트와 플러그인을 잃지 않고 Eclipse를 어떻게 다시 설치합니까?
- 3. 사용자 정의를 잃지 않고 Eclipse를 어떻게 다시 설치할 수 있습니까?
- 4. 원래 기본 연결을 잃지 않고 임시 DB 연결을 만듭니다.
- 5. 모양을 잃지 않고 데이터를 어떻게 필터링합니까?
- 6. Control.EndInvoke는 예외를위한 호출 스택을 재설정합니다.
- 7. FaultException의 전체 호출 스택을 얻는 방법
- 8. Visual Studio에서 호출 스택을 기록합니다.
- 9. Wicket : 기존 입력을 잃지 않고 현재 양식을 다시 렌더링하려면 어떻게해야합니까?
- 10. UIViewController 스택을 다시 만드는 방법은 무엇입니까?
- 11. editText가 포커스를 잃지 않고 있습니다
- 12. SEO를 잃지 않고 리디렉션 페이지
- 13. 호출 스택을 보유한 개인 메서드 호출
- 14. iText를 사용하여 주석을 잃지 않고 자르기 PDF
- 15. 어떻게 Perl bignum을 정밀도를 잃지 않고 printf 할 수 있습니까?
- 16. 세션을 잃지 않고 웹 설정을 저장하려면 어떻게해야합니까?
- 17. 형식을 잃지 않고 Word.Range 텍스트를 변경하는 방법
- 18. 로깅 후 어떻게 Delphi 예외를 다시 발생시켜야합니까?
- 19. 원래 양식으로 다시 전화하는 법
- 20. 원본을 잃지 않고 방법을 대체하는 방법?
- 21. 형식을 잃지 않고 RichTextBox 내용을 vb.net으로 변환
- 22. 모듈을 잃지 않고 Windows에서 Perl을 어떻게 업데이트 할 수 있습니까?
- 23. 홀수 문자를 잃지 않고 텍스트 파일을 어떻게 읽습니까?
- 24. 어떻게 캡슐화를 잃지 않고 트랜잭션을 수행 할 수 있습니까?
- 25. 포커스를 잃지 않고 맨 위의 Winform
- 26. UI 스레드를 다시 호출 할 때 예외를 피하려고 시도합니다.
- 27. 프로토콜에 정적 void NSString을 어떻게 게시합니까?
- 28. facebook opengraph를 사용하여 어떻게 사진을 이벤트에 게시합니까?
- 29. 어떻게 동적 정보를 Flash에서 Facebook에 게시합니까?
- 30. 호출 스택을 캡처하여 다른 스레드에서 실행하도록하십시오.
그냥 예를 들어 C#과 관련된 답변을 얻지 못하도록하고 싶었습니다. –
일부 솔루션은 언어/플랫폼별로 확실합니다. C++ 및 C# 예외는 서로 다르며 C++ 예외는 서로 다른 플랫폼에서 다르게 구현됩니다. –
좋은 솔루션은이 [stack overflow thread]에 설명되어 있습니다. (http://stackoverflow.com/questions/23820633/gdb-prevent-losing-backtrace-in-a-catch-rethrow-situation) –