c - 将 simulavr 与 avr-gdb 一起使用时抛出奇怪的异常

标签 c debugging gdb avr avr-gcc

我正在调试我为 AVR 架构编写并使用 avr-gcc-g 参数编译的程序。

我使用以下命令启动 simulavr:simulavr --device atmega8 --gdbserver

然后我调用 avr-gdb 并执行 (gdb) file main.elf 以及 (gdb) target remote localhost:1212

调试开始后,我可以成功地step 程序的汇编部分.init 等。但是,一旦执行了 jmp main 并调用了另一个函数,simulavr 就会抛出以下异常:Assertion failed: (m_on_call_sp != 0x0000), function OnCall,文件 hwstack.cpp,第 266 行。中止陷阱:6

这与将帧插入堆栈有关,但我不太清楚如何修复它。

最佳答案

该堆栈值与其应有的值相去甚远。在程序开始时,它应该接近 RAM 的末尾,而不是开始。

这可能是 simulavr 没有为您的设备正确配置 RAM 的一些问题。快速查看源代码表明,如果模拟器无法确定正确的值,堆栈指针将设置为 0。

你在编译时是否在命令行中包含 -mmcu=atmega8?尝试将 -V 开关添加到 simulavr 命令以获得更多线索。

关于c - 将 simulavr 与 avr-gdb 一起使用时抛出奇怪的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18431726/

相关文章:

c - 如何在sublime text 3中编译运行C?

debugging - 如何调试Rexx代码?

gdb - 带汇编程序的gdb:带进位标志的打印状态

c - 为什么缺少一些调试符号以及如何跟踪它们?

c++ - 如何获得在 Mac OS X 上运行的 Homebrew 版本的 GDB?

C11 - 通用选择中的枚举

c - 如何在不创建所述文件副本的情况下执行 C 程序?

java - IntelliJ中调试信息不​​一致

c - 基于 char * (string) 而不是单个 char 的 strtok

c# - 在哪里可以找到 System.Numerics.BigInteger 的源代码?