내 응용 프로그램의 스레드 중 일부가 최적화 된 기능에 앉아 있고 응용 프로그램을 디버깅 할 때 gdb가 해당 기능에서 역 추적 할 수 없습니다. 하지만 어셈블러에서 검토 한 부분 같은 것을 수행하여 이전 함수의 프레임에 손까지로 스택을 휴식을 취하실 수 있습니다 : 나는 라이브 디버깅을하고있어 경우Linux (MIPS) : 코어 덤프를 볼 때 임시로 "내용을 변경"합니다.
set $old_ra = $ra
set $old_sp = $sp
set $ra = *(unsigned long*)($sp+28)
set $sp = $sp + 48
bt
set $ra = $old_ra
set $sp = $old_sp
이 완벽하게 작동하고, 성공적으로 보여줍니다 완전한 백 트레이스. 코어 덤프를 볼 때 같은 오프라인 작업을 수행 할 수 있기를 원합니다. 분명히 핵심 덤프에서는 레지스터 파기라는 개념이 의미가 없지만 gdb에 "이 값을 레지스터에 사용"할 수있는 방법이 있으므로 비슷한 백 트레이스를 수행 할 수 있습니까?