【问题标题】:What's the best way to debug a segfault in my SPARC assembly?在我的 SPARC 程序集中调试段错误的最佳方法是什么?
【发布时间】:2010-12-04 06:50:09
【问题描述】:

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

我尝试过使用 GDB,但汇编起来很困难。我怎样才能弄清楚是哪条装配线导致了段错误这样简单的事情?

【问题讨论】:

    标签: compiler-construction assembly gdb sparc


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2023-03-15
      相关资源
      最近更新 更多