2010-06-21 3 views
0

OS를 쓰고 있는데 코드를 디버깅하는 데 문제가 있습니다. GDB를 사용하여 Bochs의 GDB 스텁에 연결하여 "원격으로"커널을 디버깅합니다. 커널 파일에서 디버깅 기호를로드하는 것처럼 연결이 잘 작동합니다. 성공적으로 위치한 kmain 함수에 대한 중단 점을 설정하고 디버거가 올바르게 (내 커널 내부에서) 중단됩니다. 그러나 나는 내 코드를 "step"또는 "next"할 수 없으며 GDB가 현재 코드 라인을 분명히 결정할 수도 없다.Bochs + GDB로 디버깅 : "현재 함수의 범위를 찾을 수 없습니다"?

"단계"를 시도하면 "현재 함수의 범위를 찾을 수 없습니다"라는 메시지가 나타납니다. 이 오류 메시지는 언제든지 얻을 수있는 유일한 오류 메시지입니다.

내 코드가 -g 플래그로 컴파일되고있다. (GCC 옵션을 사용하여 다른 유형의 디버깅 정보를 시도했지만 아무 것도 작동하지 않았다.) 나는 GDB 매뉴얼을 살펴보고, 대답, 나는 완전히 엉망이 됐어. 어떤 도움이라도 훌륭 할 것입니다.

감사합니다.

답변

3

글쎄, 디버깅이 작동하고 있지만 에뮬레이터를 전환해야했습니다. 나는 Gem이 Qemu와 함께 작업 할 수있게 만들었다. GDB가 Qemu gdbserver에 연결되게하려면 다음 옵션을 Qemu에 전달해야했습니다 : "-gdb tcp :: 1234, ipv4". 디버깅은 이제 완벽하게 작동합니다!

+2

답변을 게시 해 주셔서 감사합니다. 운영 체제와 함께 행운을 빌어 요. –

0

인터넷 검색 http://www.bravegnu.org/gnu-eprog/c-startup.html 아마, 당신은 임베디드 디바이스를 코딩 할 때의 과정을 설명 ... http://www.cygwin.com/ml/gdb/2005-03/msg00237.html "당신이 gdbserver에 첨부 할 때, 디버그에서 프로세스가 C 시작 코드가 완료되지 않은 때문이다"던졌습니다 이게 도움이 될까요?

답을 찾으면 문제의 해결책이 무엇인지 알고 싶습니다. 여기에 게시하십시오.

+0

나는 첫 번째 링크를 이미 발견 했으므로 제안 된 해결책은 gdb로 수행하는 것입니다 "main"대신에 나의 kmain에서 깨기). 나는 그것이 커널 내부에서도 깨지고 있다는 것을 안다. 두 번째 링크는 기본적으로 모든 것을 제 스택으로 재검토하도록 만들었습니다. 그리고 제가 말할 수있는 한 그것은 사실입니다. 응답 주셔서 감사합니다! – TheArcher

0

왜 gdb-stub가 활성화 된 bochs가 config 옵션으로 까다로운 것 같습니까? 다음과 같은 옵션을 사용하면 다음과 같은 옵션을 사용할 수 있습니다. --enable-x86-64, --enable-vmx

+0

정보를 제공해 주셔서 감사합니다! – TheArcher

관련 문제