FreeBSD 6.2 및 OS에서 C++ 프로그램이 충돌하여 코어 덤프를 생성 할 수있었습니다. 일부 스택 프레임을 절단하여 명령 포인터를 재설정하고 gdb에서 프로세스를 다시 시작하는 것이 가능합니까?코어 덤프로 인한 충돌에서 복구
답변
예, gdb는 실행중인 프로그램뿐만 아니라 코어 덤프도 디버깅 할 수 있습니다. a.out
이 프로그램의 실행 파일의 이름이라고 가정하고 a.core
은 핵심 파일의 이름, 그래서 같은 GDB를 호출 :
gdb a.out a.core
을 그리고 당신이 어떤 방법으로 실행을 계속할 수 없습니다를 제외하고 당신은 (정상처럼 디버깅 할 수 있습니다 당신이 할 수 있더라도, 프로그램은 다시 충돌 할 것입니다.) 스택 추적, 레지스터, 메모리 등을 검사 할 수 있습니다.
일부 스택 프레임을 절단하고 명령 포인터를 재설정하고 gdb에서 프로세스를 다시 시작할 수 있습니까?
나는 당신이 : 프로세스 상태를 변경하고 처음부터 충돌이없는 것처럼 다시 실행을 시작하도록 설정했다고 가정합니다.
아니요. GDB (마술처럼이 기능이있는 경우)가 파일 설명자를 처리하는 방법 (커널이 프로세스가 종료 될 때 자동으로 닫히는 방법)을 제안 하시겠습니까? 이것의
GDB가 함수를 호출하고 변수를 할당 할 수있는 능력을 가지고 있다고 잘못 생각하지 않는다면 적어도 이론 상으로는 프로세스가 다시 시작되는 지점에서 파일 설명자를 복원 할 수 있습니다. – Droopov
"함수를 호출 할 수있는 능력이 있습니다"- "라이브"의 열등한 프로세스가있는 경우에만 코어를 디버깅 할 때 GDB는 "파일 설명자 복원"을 할 수 없습니다 : 더 이상 존재하지 않는 파일을 가리킬 수 있거나 또한 파일 오프셋은 커널에 의해서만 유지되므로 GDB는 커널을 복원 할 방법이 없습니다. –
가능한 중복 : Best practices for recovering from a segmentation fault
요약 : 그것은 가능하지만 권장하지 않습니다. 이를 수행하는 방법은 시그널 핸들러에서 setjmp()와 longjmp()를 사용하는 것입니다. (완전한 소스 코드 예제를 중복 된 게시물로 보시기 바랍니다.
- 1. 왜 Solaris Sparc의 코어 덤프로 내 erlang 빌드가 실패합니까?
- 2. C++ : [memcpy]에서 코어 덤프로 프로그램이 충돌 함
- 3. 코어 데이터 저장소의 마이그레이션으로 인한 문제
- 4. 이클립스 충돌에서 회복
- 5. IE 충돌에서 createRange() 사용
- 6. 충돌에서 일치하는 줄을 확인하십시오.
- 7. 스키마 덤프로 PostgreSQL 스키마 업데이트
- 8. keypath에서 NSEntityDescription 복구
- 9. 16 진수 덤프로 정적 변수 지정하기
- 10. joomla 커스텀 컴포넌트 충돌에서 편집과 추가하기
- 11. 관리되는 C++ 충돌에서 C# 코드 호출
- 12. 확장 충돌에서 js-ctypes 사용 firefox
- 13. 윈도우 7 복구
- 14. 실행 루프 종료 - 자동 복구 풀 복구
- 15. 크래시 복구
- 16. StaleObjectStateException에서 복구
- 17. 테이블 복구
- 18. 데이터 복구
- 19. Openfire Java 오류로 인한 충돌
- 20. WinForms에서 메모리 누수 충돌 복구
- 21. C#으로 인한 메모리 누수로 인한 이미지 누출
- 22. C에서 dll로 인한 문제 #
- 23. sscanf로 인한 세그먼트 오류
- 24. 문자열 분할로 인한 오류
- 25. git : rebase로 인한 충돌을
- 26. UIRefreshControl로 인한 예외
- 27. 유출로 인한 탈출은 무엇입니까?
- 28. 2D 아바타로 인한 어려움
- 29. curl_multi_exec로 인한 오류 처리
- 30. HashMap으로 인한 메모리 누출
GDB는 어떤 프린터도 실행할 수 없기 때문에 "프로그램 실행과 마찬가지로"코어 덤프를 디버깅하지 않습니다 .http : //yosefk.com/blog/ 매우 이상하게도 gdb-ve-ery-fun.html – ACyclic