3

我正在编写一个 sparc 编译器。我的一个测试用例在从命令行正常运行时工作正常,但是当我将输出重定向到文件时会出现段错误。

我尝试过使用 GDB,但组装起来很困难。我怎样才能找出像哪条装配线导致段错误这样简单的事情?

4

1 回答 1

5

不幸的是,GDB 确实是在 UnixSPARCs 中调试机器级问题的最佳方式,这有点令人遗憾。

要理解的基本内容是段错误是一种异常,如果附加了异常,异常会导致程序闯入调试器。他们这样做是为了让您可以在崩溃时检查处理器寄存器和内存的状态。

您应该查看指令计数器寄存器 (%ip)。这将包含要执行的最后一条指令的地址,即触发段错误的指令。这将是一个加载或存储操作,因此您可以查看哪个寄存器包含其源/目标内存地址,并找出该地址错误的原因(通常为 NULL,或者一些不是有效地址的垃圾编号)。

你可以做的另一件事是编译你的进程以在它失败时发出一个核心转储,这将在它作为磁盘上的一个大文件死亡时写出程序状态的快照。不幸的是,用于读取核心转储的程序是... gdb。

于 2010-12-04T07:46:40.350 回答