问题
I am debugging a program that I have written for the AVR architecture and compiled using avr-gcc
with the -g
argument.
I launch simulavr
using the following command: simulavr --device atmega8 --gdbserver
Then I invoke avr-gdb
and do (gdb) file main.elf
as well as (gdb) target remote localhost:1212
Once debugging has started, I can successfully step
through the assembly portion of my program .init
et al. However, once jmp main
is executed and a call to another function is made, simulavr
throws the following exception: Assertion failed: (m_on_call_sp != 0x0000), function OnCall, file hwstack.cpp, line 266. Abort trap: 6
It has something to do with the pushing a frame to the stack, but I can't quite put my finger on how to fix it.
回答1:
That stack value is very far from what it should be. At the start of your program, it should be near the end of RAM, not at the beginning.
It is likely to be some problem with simulavr not configuring RAM properly for your device. A quick look for the source code shows that the stack pointer is set to 0 if the simulator can't determine the correct value.
Did you include -mmcu=atmega8 in the command line when compiling? Try adding -V switch to the simulavr command for more clues.
来源:https://stackoverflow.com/questions/18431726/weird-exception-thrown-when-using-simulavr-with-avr-gdb