GNU가 (AVR) 어셈블리의 단일 스텝 라인에 GDB를 방출하도록 GNU를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1275944

문제

어셈블리에서 GDB에 대한 라인 번호 디버깅 정보를 방출하기 위해 가스를 얻는 방법을 알 수 없습니다. AVR-GCC 크로스 컴파일러를 사용하고 있지만 의심의 여지가 있습니다.

다음 명령 줄 옵션을 사용하여 조립하기 위해 다음 명령 줄 옵션을 사용하고 있습니다. -cpp -wa, -ggdb -c -o z813.o z813.s

C 코드를 컴파일하기 위해 거의 동일한 인수 세트를 사용하면 'objdump -l -d'를 사용하여 줄 번호와 소스 파일 증강을 볼 수 있습니다.

그러나 어셈블리 객체에는 아무것도 없습니다. 즉


000000d4 <run_timetable>:
      d4:       0e 94 57 00     call    0xae    ; 0xae <run_timetable_row>
      d8:       0e 94 b4 00     call    0x168   ; 0x168 <delay>

vs

00000f9c :
main():
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:68
     f9c:       0e 94 ae 07     call    0xf5c   ; 0xf5c <init>
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:70
     fa0:       0e 94 6a 00     call    0xd4    ; 0xd4 <run_timetable>

AVR-GDB (SimulaVR 원격 GDB 연결을 통해)에서는 기호 이름과 정보를 인식하지만 디버거를 조립 코드를 통해 단일 단계로 가져올 수는 없습니다. 나는 이것이 관련되어 있다고 가정한다.

나는 정보/man/google에서 이것을 찾아서 깃발을 퍼 뜨리려고 노력했다. 도움이 된 도움이 감사드립니다!

도움이 되었습니까?

해결책

어셈블러 소스 코드를 "컴파일"하면 C 컴파일러를 호출하는 것은 다소 과잉입니다. 컴파일러는 입력이 C 파일임을 인식하고 -G 및 -OS와 같이 C 컴파일에 영향을 미치는 옵션을 무시합니다. "-v"를 컴파일러 라인으로 전달하여 실제로 어셈블러로 전달되는 옵션을 확인하십시오.

내가 모일 때

avr-as --gstabs -mmcu=atmega644 a.s -o a.o

그런 다음 개체 파일에서 멋진 소스 라인 정보를 얻습니다. 내 버전의 AVR -AS (2.18.0)는 -ggdb 옵션을 전혀 지원하지 않으며 -g, -gstabs, -gstabs+, -gdwarf -2 만 있습니다. 찌르기가 있으면 Objdump는 선을 표시 할 수 있습니다. DWARF -2를 사용하면 아닙니다. OBJDUMP의 버그인지 또는 AS의 버그인지 확실하지 않습니다.

어셈블러를 "gcc"로 호출 할 것을 절대적으로 고집한다면 -wa, -gstabs를 통과해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top