Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 什么';在我的SPARC程序集中调试segfault的最佳方法是什么?_Compiler Construction_Assembly_Gdb_Sparc - Fatal编程技术网

Compiler construction 什么';在我的SPARC程序集中调试segfault的最佳方法是什么?

Compiler construction 什么';在我的SPARC程序集中调试segfault的最佳方法是什么?,compiler-construction,assembly,gdb,sparc,Compiler Construction,Assembly,Gdb,Sparc,我正在写sparc编译器。我的一个测试用例在从命令行正常运行时工作正常,但在将输出重定向到文件时出现故障 我尝试过使用GDB,但在汇编时很困难。我怎样才能找出像哪条装配线导致segfault这样简单的问题呢?不幸的是,GDB确实是调试UnixSPARCs中机器级问题的最佳方法,这有点令人伤心 要了解的基本情况是segfault是一种异常,如果附加了一个,异常会导致程序进入调试器。它们这样做是为了在崩溃时检查处理器寄存器和内存的状态 您应该查看指令计数器寄存器(%ip)。这将包含要执行的最后一条指

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


我尝试过使用GDB,但在汇编时很困难。我怎样才能找出像哪条装配线导致segfault这样简单的问题呢?

不幸的是,GDB确实是调试UnixSPARCs中机器级问题的最佳方法,这有点令人伤心

要了解的基本情况是segfault是一种异常,如果附加了一个,异常会导致程序进入调试器。它们这样做是为了在崩溃时检查处理器寄存器和内存的状态

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

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