Ankur Sethi
그는 물었다 11년 전
98

Gdb 예외가 발생할 때까지 응용 프로그램을 실행

39 m working on a 다중 스레드 응용 프로그램 및 i&, I want it 디버그로 사용하는 것이다.

문제는 내 스래드입니다 죽어가고 있습니다. "라는 메시지가 있는 한

pure virtual method called
terminate called without an active exception
Abort

하지만 난 내 그러니까말이야 원인에 대한 경고의 메시지를 스레드할 아무 생각이 여기서 발생합니다. A backtrace 정말로 유용합니다.

Gdb 의 app 이 때마다 일시정지합니다 달릴 땐 내 마음이 뚜르산을 또는 재개됨. 일반적으로 죽을 때까지 계속 실행하시겠습니까 중 i want my app 를 이루었고, 그렇게 할 수 있는 모든 것을 중단하고 스래드입니다 idfsysobject. 지점임 backtrace 얻을 수 있습니다.

Hasturkun
그는 11년 전 댓글을 달았습니다
0

Gdb 는 어떤 신호를 보고 있을 때 일시정지됩니다? 'like' 처리하십니까 SIGUSR1 노스트로프 노프리나 전달하십시오 명령을 실행할 수 있어야 합니다.

답변 3 개

Catchpoint&quot &quot 사용하여, 시도해 볼 수 있습니다. 디버거 (catch '투사') 를 정지점을 시점에 예외적으로 생성됩니다.

Gdb 는 다음과 같은 발췌문 에서 수작업식 카치포린트 피쳐입니다.

-

5.1.3 설정값입니다 카치푸앵츠

카치푸앵츠 인해 특정 종류의 프로그램을 사용할 수 있는 디버거를 정지점을 같은 이벤트에 c++컴파일러는 읽어들이기를 예외 또는 공유 라이브러리. Catch 명령을 사용하여 카치포린트 설정할 수 있습니다.

  • 이벤트 + catch &gt. 이벤트 * 정지점을 때 발생합니다. 이벤트 다음 중 하나입니다.

  • 투사 &gt. 던지는 한 c++컴파일러는 예외가 아니다.

  • 시스템 &gt. 이 인기를 끌고 있는 c++컴파일러는 예외가 아니다.

  • exec &gt. 이것은 exec 호출이 대해서만 사용할 수 있습니다.) 는 현재 에이치피 유엑스.

  • 포크하지 &gt. 전화를 포크하지. 이 기능은 현재 에이치피 유엑스 대해서만 사용할 수 있습니다.

  • 브포크 &gt. 전화를 브포크. 이 기능은 현재 에이치피 유엑스 대해서만 사용할 수 있습니다.

    • 로드형 리브나미 net/* 또는 로드 &gt. 모든 동적 라이브러리 공유 라이브러리 또는 읽어들이기를 읽어들이기를 리브나미. 이 기능은 현재 에이치피 유엑스 대해서만 사용할 수 있습니다.
  • 언로드할 리브나미 언로드할 net/ 또는 &gt. 이 모든 동적 라이브러리 공유 라이브러리 또는 언로드를 언로드를 로드되었는지 리브나미. 이 기능은 현재 에이치피 유엑스 대해서만 사용할 수 있습니다.

  • 타카치 이벤트 &gt. 대해서만 활성화되었는지 카치포린트 설정할 수 있는 한 세워줘. 이 후 처음 이벤트는 포착됨 카치포린트 자동으로 삭제됩니다.

'정보' 명령을 사용하여 분할합니다 나열하십시오 현재 카치푸앵츠.

현재는 일부 예외 처리 (catch 투사 앤 캐치 catch) c++컴파일러는 한계가 있는 것이다.

  • 전화하시기 경우 일반적으로 함수를 통해 GDB 실행 제어 기능을 너회들 되돌려줍니다 때 마쳤습니다. 그러나 우회할 수 있는 메커니즘을 경우 예외를 던진다 호출하십시오 호출하십시오 되돌려줍니다 제어 및 원인 또는 단순히 중단할 때까지 계속 실행하시겠습니까 인컨텍스트 너회들 프로그램에 안타, GDB 는 신호를 수신하는 정지점을 물릴 수 있는, 또는 종료하므로. 이 경우. 카치포린트 설정할 경우에도 대한 예외. 대화형 대한 예외는 비활성화됨 카치푸앵츠 내에 있다.

  • 예외가 대화식으로 올릴 수 없습니다.

  • 대화식으로 예외가 처리기에서 설치할 수 없습니다.

Catch 때로는 가장 좋은 방법은 없는 디버그로 예외 처리. 정확한 위치를 알고 싶은 경우, 예외적으로 뚜르산을 것이 정지점을 idfsysobject. 처리기에서 호출됨 이쪽요 때문에 전에 먼저 풀림 수행되는지 스택할 볼 수 있습니다. 그렇지 않을 경우 정지점을 설정할 수 있는 예외 핸들러 대신 쉽게 찾을 수 있는 아웃해야 idfsysobject. 인상됐다.

직전 일부 예외가 처리기에서 중지되기를 호출됨 구축현 대한 지식이 있어야 합니다. Gnu 라이브러리 함수를 호출할 경우, 예외는 c++컴파일러는 제기했나요 release. _raise_exception 디스크입니다. diskid 다음 ANSI C 인터페이스:

/* addr is where the exception identifier is stored.
   id is the exception identifier.  */
void __raise_exception (void **addr, void *id);

먼저, 모든 예외를 잡을 수 있도록 디버거 스택할 풀림 수행되는지 중단점을 설정할 _raise_exception (부분 참조 됩니다. 감시 점. 및 예외).

조건부 정지점을 (부분 참조 고장 상태) 를 통해 그 때, 특정 id 의 값에 따라 달라집니다 막을 수 있는 프로그램에 예외는 없다. 여러 프로그램에서 사용할 수 있는 조건부 됩니다 정지점을 경우 여러 가지 예외는 없다.

Cassio Neri
YSC
그는 3년 전 댓글을 달았습니다
0

100 번째 업보테 확인하십시오.

scai
그는 일 년 전 댓글을 달았습니다
0

예외 유형을 지정할 수도 있습니다. '투사' std::runtime_exception 잘 보기 위해 (예:

중단점을 설정할 _pure_virtual

Philipp Claßen
그는 4년 전 댓글을 달았습니다
0

야, 정보기술 (it) 의 @jeffreyhill 호출됨 _cxa_pure_virtual 됐다. 그래서 내가 직접 확인하는 방법을 모르는 don& 해답이야 편집하십시오 # 39 싶지 않다. 난 지금 다운 투표 수 있지만, t # 39 장 don& 오토메이티드 잘못 아는 사람이 지정하십시오. 수정하십시오 편집할 수 합니다.

이는 해당 함수 이름 있는 파비우 mgcc 4.1 설정 및 원-부트 변경되었습니까 정지점을 이 기능을 한다.

_cxa_pure_virtual