2009-12-18 9 views
12

어떤 상황에서도 프로그램의 상태를 코어 파일 생성 중에 복원 할 수 있습니까?코어 파일에서 프로그램 상태 복원

내가 묻는 이유는 함수를 실행하는 gdb의 기능을 이용하려면 실행중인 인스턴스가 있어야한다는 것입니다. 코어의 내용으로 설정된 상태로 동일한 실행 파일의 모의 프로세스를 생성하는 것이 가능해야합니까?

처음부터이 작업을 수행하기를 원하는 상황에 어떤 대안이 없습니까? 이 경우에는 코어의 백 트레이스가 라이브러리 함수로 연결되었고이 함수 호출에 입력을 복제하려고했지만 입력 중 하나는 실행중인 함수 호출로 문자열로 쉽게 직렬화 할 수있는 복잡한 객체였습니다 인스턴스이지만 코어 덤프에서는 그렇지 않습니다.

답변

7

이론적으로 원하는 것을 정확히 수행 할 수 있지만 (AFAICT) GDB에는 아직 지원되지 않습니다.

가장 좋은 방법은 GDB-7.0을 사용하고 내장 파이썬 스크립팅을 사용하여 직렬화 기능을 다시 구현하는 것입니다.

+0

감사합니다 - 파이썬 스크립팅 내가 원하는 것을 할 수 있을지 모르겠지만 그것은 매우 유용하게 들리 네요. – cyborg

2

코어 파일은 이미 무엇입니까? gdb를 원본 실행 파일과 코어 파일과 함께로드하면

gdb myprogram.exe -c mycorefile 

그런 다음 충돌 지점으로 이동합니다. 모든 일반 검사 기능을 사용하여 변수를보고 스택 추적을 볼 수 있습니다.

또는 질문에 대한 오해를 한 적이 있습니까?

+3

코어 파일을 디버깅 할 때 gdb에서 함수를 실행할 수 없습니다. 그래서 코어 파일을 가지고 복잡한 클래스 Foo의 변수를 찾고 실행중인 프로세스가 아니기 때문에 Foo.getSerialization()을 실행하여 멋진 간단한 문자열 표현을 얻고 싶습니다. 그래서 문제는 코어에서 실행중인 프로세스로 갈 수 있다는 것입니다. – cyborg

+1

gdb의 예쁜 인쇄 값을 만들기위한 코드를 작성할 수 있습니다. 여기 Python API (http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API)를 참조하십시오. –

+0

@JeffFoster 저는 실제로 도움이되지 않는다고 생각합니다. 라이브 기능을 호출하고 싶다면 그냥 불가능합니다. –

관련 문제