2013-02-21 14 views
6

Tôi đang sử dụng trình biên dịch fortran intel (ifort) trong môi trường mpi. Nó chỉ ra rằng mã của tôi có tràn bộ đệm khi tôi biên soạn với các cờ -g -O2 -check bounds. Sau khi chạy một thời gian, tôi nhận được tin nhắn này:Intel Fortran - giới hạn kiểm tra không cung cấp số dòng

forrtl: severe (408): fort: (2): Subscript #1 of the array XX has value 4 which is greater than the upper bound of 3 

Image   PC    Routine   Line  Source    
program.exe  00000000006E757E Unknown    Unknown Unknown 
program.exe  00000000006E6016 Unknown    Unknown Unknown 
program.exe  00000000006905B2 Unknown    Unknown Unknown 
program.exe  0000000000642E6B Unknown    Unknown Unknown 
program.exe  0000000000643381 Unknown    Unknown Unknown 
program.exe  00000000005F33FB Unknown    Unknown Unknown 
program.exe  00000000004139E7 Unknown    Unknown Unknown 
program.exe  000000000040A6B4 Unknown    Unknown Unknown 
program.exe  0000000000409D2C Unknown    Unknown Unknown 
libc.so.6  000000380D61ECDD Unknown    Unknown Unknown 
program.exe  0000000000409C29 Unknown    Unknown Unknown 

Đây là tuyệt vời - bây giờ tôi biết rằng tôi đang tràn ngập XX, nhưng ở đâu? sử dụng gfortran, -fbounds-check sẽ cung cấp cho tôi một tệp và số dòng. Có cách nào để tôi có thể nhận được điều đó với ifort không?

+1

Thử sử dụng -traceback cùng với cờ hiện tại của bạn. Trình biên dịch sau đó sẽ tạo thêm thông tin trong các tệp đối tượng để xác định vị trí dòng nguồn nơi xảy ra lỗi khi chạy. – milancurcic

+0

Tôi sẽ kiểm tra nó ra và lấy lại cho bạn trong một vài phút khi mã đạt đến điểm xấu. – mgilson

+0

@ IRO-bot - Điều đó đã làm được điều đó. Đăng câu trả lời và tôi sẽ vui vẻ chấp nhận. Nó vẫn không lấp đầy toàn bộ bảng - Có lẽ vì một số "thói quen" đó đã được chôn trong thư viện thời gian chạy hoặc một cái gì đó, nhưng nó cho tôi thấy nơi tôi cần tìm. – mgilson

Trả lời

6

Cờ -traceback có thể được sử dụng với các trình biên dịch Fortran của Intel và Portland để yêu cầu thông tin bổ sung được tạo trong các tệp đối tượng cho truy xuất đường và nguồn. Khi xảy ra lỗi nghiêm trọng trong thời gian chạy, chương trình sẽ cố gắng báo cáo số dòng và tệp nguồn nơi xảy ra lỗi, cũng như số dòng và tệp nguồn từ thủ tục cha mẹ nơi thực hiện cuộc gọi.

Cờ tương đương cho gfortran là -fbacktrace.

Các vấn đề liên quan