Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

调试段故障

如果程序遇到段故障 (SIGSEGV),便会引用其可用内存外的内存地址。

    导致段故障的最常见原因:

  • 数组索引超出声明的范围。

  • 数组索引的名称拼写错误。

  • 调用例程的一个参数是 REAL,而被调用例程对应的参数却是 INTEGER

  • 数组索引计算错误。

  • 调用例程的参数数量不足。

  • 使用未定义的指针。

使用 dbx 找出问题

可使用 dbx 找到出现段故障的源代码行。

使用程序来生成段故障。

demo% cat WhereSEGV.f
    INTEGER a(5)
    j = 2000000
    DO 9 i = 1,5
        a(j) = (i * 10)
9    CONTINUE
    PRINT *, a
    END
demo%

可使用 dbx 找到 dbx 段故障的行号。

demo% f95 -g -silent WhereSEGV.f
demo% a.out
Segmentation fault
demo% dbx a.out
Reading symbolic information for a.out
program terminated by signal SEGV (segmentation violation)
(dbx) run
Running: a.out
signal SEGV (no mapping at the fault address)
    in MAIN at line 4 in file "WhereSEGV.f"
    4                   a(j) = (i * 10)
(dbx)