簡體   English   中英

解釋回溯錯誤消息

[英]interpreting backtrace error message

當我使用gfortran -g -fbacktrace -ffpe-trap = invalid,overflow,underflow File.f90編譯代碼時,出現以下錯誤:

Program received signal SIGFPE : Floating - Point exception - erroneous arithmetic operation.

Backtrace for this error:

#0 0x7f3da0768ed7 in ???
#1 0x7f3da076810d in ???
#2 0x7f3d9fe9b7ef in ???
#3 0x7f3da0230a3e in ???

我的問題是:我該如何解釋這些數字以及???在“此錯誤的回溯:”下。 如何使用此錯誤消息來幫助我找到錯誤? 它們是否以某種方式與有問題的特定代碼行相關? 如果是這樣,怎么辦?

到目前為止,我意識到我有一個錯誤的算術運算錯誤,但是我不知道在哪里,並且此回溯錯誤消息根本沒有幫助。 如果僅使用gfortran File.f90進行編譯,則在編譯或運行期間完全沒有錯誤消息。

這可能取決於您使用的目標。 GFortran回溯功能取決於libbacktrace,它可能不適用於所有目標。 在Ubuntu 16.04 x86_64上獲取代碼

program bt
  use iso_fortran_env
  implicit none
  real(real64) :: a, b = -1
  a = sqrt(b)
  print *, a
end program bt

當編譯時

gfortran -g -ffpe-trap=invalid  bt.f90

我懂了

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.

Backtrace for this error:
#0  0x7F08C38E8E08
#1  0x7F08C38E7F90
#2  0x7F08C35384AF
#3  0x4007F9 in MAIN__ at bt.f90:5
zsh: floating point exception  ./a.out

在堆棧幀3的哪個位置,您可以看到錯誤發生在bt.f90的第5行。

現在,堆棧幀#0-#2的內容是什么? 好吧,它們是GFortran運行時庫libgfortran中的回溯功能。 由於某種原因,libbacktrace無法解析動態庫中的符號。 如果我靜態鏈接它:

gfortran -g -static -ffpe-trap=invalid  bt.f90

我懂了

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.

Backtrace for this error:
#0  0x40139E in _gfortrani_backtrace
#1  0x400D00 in _gfortrani_backtrace_handler
#2  0x439B2F in gsignal
#3  0x400C01 in MAIN__ at bt.f90:5
zsh: floating point exception  ./a.out

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM