Raspbian에서 gdb로 프로그램을 디버깅하려고 시도했지만 얻을 수있는 것은 다음과 같습니다.
Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
SIGILL
핸들을 nostop
( handle SIGILL nostop
) 로 설정하는 데 도움이되지 않습니다 .
Program received signal SIGILL, Illegal instruction.
Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.
내가 얻는 모든 역 추적은 다음과 같습니다.
#0 0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1 0x00000000 in ?? ()
gdb 외부에서 프로그램을 시작하면 정상적인 C ++ 예외가 발생합니다 (디버깅하고 싶습니다).
모든 소프트웨어는 raspbian 저장소에서 최신 버전으로 업데이트되었습니다. 또한 나는 라스베리 파이 파운데이션 커널 "3.18.9+"와 라스베리 커널 "3.18.0-trunk-rpi"를 시도했습니다 (사용자 정의 커널 모듈이 필요합니다). 문제없이 기본 컴퓨터에서 동일한 프로그램을 디버깅 할 수 있습니다.
업데이트 : 디버깅은 커널 "3.12-1-rpi"에서 예상대로 작동합니다.
이 오류의 원인은 무엇입니까?
@mpromonet
—
someonr
pass
기본적으로 설정되어 있기 때문에 차이가 없어야합니다. 와 동일한 결과handle SIGILL nostop
그리고 의미있는 역 추적 (
—
goldilocks
bt
)이 없습니까? 누군가 "이 오류의 원인은 무엇입니까?" 링커 / 로더의 잘못된 명령 ( ld-linux-armhf
) 에만 기반합니다 .
의미있는 역 추적을 얻을 수 없었습니다 (편집 된 질문 참조). 작은 예를 만들어 보겠습니다. 또한 gdb가 없으면 불법 opcode가 발생하지 않는다고 혼동됩니다.
—
someonr
스택이 부서진 것 같습니다.
—
mpromonet
handle SIGILL pass nostop
?