Rust Embedded Book 에 따라 OpenOCD와 GDB를 사용하는 방법을 배우고 있습니다 .
실행중인 OpenOCD에 연결하는 순간이 있습니다.
(gdb) target remote :3333
Remote debugging using :3333
0x00000000 in ?? ()
내가 아는 변경없이 무언가가 고장 났고 이제 다음과 같은 것을 볼 수 있습니다.
(gdb) target remote :3333
Remote debugging using :3333
0x08000bbe in __c_m_sh_syscall ()
그 이후로는 제대로 작동하지 않습니다. 0x00000000 in ?? ()
선은 무엇을 의미하며 어떻게 권리를 되 찾을 수 있습니까?
target remote
GDB로 타겟에 연결하면 타겟 에게 $pc
값을 포함한 현재 레지스터 상태를 묻습니다 . GDB는 (그 시점에서) 어떤 식 으로든 원격 상태를 수정하지 않습니다.
처음 연결했을 때 리모컨이 $pc
값을 보고했습니다 0x0
. 어떤 이유로 원격 상태가 변경된 경우, 예를 들어 원격에서 무언가를 실행 한 경우 $pc
값이 변경 될 수 있습니다 0x08000bbe
.
그런 다음 연결을 끊었다가 다시 연결하면 원격 대상에 GDB가 표시 하는 $pc
값 이 여전히있을 수 있습니다 0x08000bbe
.
주석에서 언급했듯이 GDB는 $pc
프로그램의 디버그 정보에 값 을 매핑하려고합니다 . ??
쇼 GDB는 주소에 어떤 기호를 찾을 수 없습니다 0x0
. GDB는 __c_m_sh_syscall
주소 근처 에서 기호를 찾았습니다 0x08000bbe
. 그러나이 정보는이 시점에서 그다지 의미가 없으며 아직 대상에 아무것도로드하지 않았으므로 실제로 함수에 있지 않고 __c_m_sh_syscall
원격의 현재 주소 일뿐입니다.
load
명령 을 수행 하면 GDB가 실행 파일을 대상에로드하고 $pc
.
TL; DR; 작업 흐름이 target remote
이면 load
바로 다음의 대상 상태에 대해 걱정하지 마십시오 target remote
. 연결시 대상에서 발생하는 임의의 상태 일뿐입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다