3.18 커널을 사용하여“프로그램 수신 신호 SIGILL”없이 디버깅하는 방법 (3.12 작동)?


10

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"에서 예상대로 작동합니다.

이 오류의 원인은 무엇입니까?


시도 했습니까 handle SIGILL pass nostop?
mpromonet

@mpromonet pass기본적으로 설정되어 있기 때문에 차이가 없어야합니다. 와 동일한 결과handle SIGILL nostop
someonr

그리고 의미있는 역 추적 ( bt)이 없습니까? 누군가 "이 오류의 원인은 무엇입니까?" 링커 / 로더의 잘못된 명령 ( ld-linux-armhf) 에만 기반합니다 .
goldilocks

의미있는 역 추적을 얻을 수 없었습니다 (편집 된 질문 참조). 작은 예를 만들어 보겠습니다. 또한 gdb가 없으면 불법 opcode가 발생하지 않는다고 혼동됩니다.
someonr

1
스택이 부서진 것 같습니다.
mpromonet

답변:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.