Tôi đã biên soạn mã Fortran, chứa một số mô-đun, sử dụng cả gfortran 4.4 và intel 11.1 và sau đó đã cố gắng gỡ lỗi bằng cách sử dụng cả gdb và DDT. Trong mọi trường hợp, tôi không thể thấy giá trị của bất kỳ biến nào được khai báo trong mô-đun. Các biến toàn cầu này có giá trị, vì mã vẫn chạy đúng, nhưng tôi không thể thấy giá trị trong các trình gỡ lỗi của mình. Các biến cục bộ là tốt. Tôi đã gặp khó khăn trong việc tìm giải pháp cho vấn đề này ở nơi khác trực tuyến, vì vậy có lẽ không có giải pháp đơn giản, nhưng thực sự khó gỡ lỗi mã của tôi nếu tôi không thể thấy giá trị của bất kỳ biến toàn cục nào của mình.Biến mô-đun Fortran không thể truy cập trong các trình gỡ rối
Trả lời
Trong gdb, hãy thử tham khảo các biến toàn cầu với những cái tên như __ modulename __ variablename
Bạn có thể kiểm tra rằng đây là quyền mangling kế hoạch sử dụng nm và grep để tìm một trong các biến toàn cục của bạn trong biểu tượng của chương trình của bạn.
Nếu cách đó không hiệu quả, hãy đảm bảo bạn đang sử dụng phiên bản gdb gần đây.
Dưới đây là một chủ đề về vấn đề này: http://gcc.gnu.org/ml/fortran/2005-04/msg00064.html
Điều này làm việc để hiển thị các phần tử không phải mảng ngoài biên dịch với -O0. Tôi có thể in các biến toàn cầu, nhưng tôi vẫn không thể thấy các giá trị của mảng toàn cục. Khi tôi cố gắng in tên của mảng như __modulename_MOD_arrayname, một số số lớn dường như ngẫu nhiên được trả về. Nếu tôi cố gắng in một phần tử của mảng, tôi lấy -nan (0xf ...). Bất kỳ ý tưởng làm thế nào để có được mảng để in ra một cách chính xác cũng như các biến mảng không? – rks171
Chỉ cần lưu ý về sự tiến bộ của tôi, tôi đã thử xây dựng với intel 11.1 (với -O0 lần này) và gỡ lỗi với gdb, và tất cả các biến toàn cầu và mảng toàn cầu in ra đúng cách. Tôi đã thử xây dựng với g95 và gỡ lỗi với biến gdb và toàn cầu sẽ không in ra ngay cả khi được xây dựng với -O0 (tôi phải sử dụng quy ước đặt tên được liệt kê ở trên để nhận chúng). Nhưng mảng toàn cầu vẫn không in ra. Tóm lại, có vẻ như đó là vấn đề với gfortran và g95 chứ không phải gdb. Và xây dựng với intel 11.1 hoạt động tốt. – rks171
Với GDBs mới hơn (7.2 nếu tôi nhớ chính xác), mô-đun gỡ lỗi rất đơn giản. Đi theo chương trình sau:
module modname
integer :: var1 = 1 , var2 = 2
end module modname
use modname, only: newvar => var2
newvar = 7
end
Bây giờ bạn có thể chạy:
$ gfortran -g -o mytest test.f90; gdb --quiet ./mytest
Reading symbols from /dev/shm/mytest...done.
(gdb) b 6
Breakpoint 1 at 0x4006a0: file test.f90, line 6.
(gdb) run
Starting program: /dev/shm/mytest
Breakpoint 1, MAIN__() at test.f90:6
6 newvar = 7
(gdb) p newvar
$1 = 2
(gdb) p var1
No symbol "var1" in current context.
(gdb) p modname::var1
$2 = 1
(gdb) p modname::var2
$3 = 2
(gdb) n
7 end
(gdb) p modname::var2
$4 = 7
(gdb)
Nó phải là gdb 7.2 mà điều này làm việc vì tôi đã cài đặt 7.1 trên hệ thống của tôi và gõ "p modname :: var" vẫn còn kết quả trong "Không có biểu tượng trong bối cảnh hiện tại". Tuy nhiên, lưu ý rằng toàn bộ vấn đề này có vẻ là vấn đề gfortran chứ không phải vấn đề gdb, như khi tôi xây dựng mã nguồn của mình với ifort intel 11.1, gdb không có vấn đề gì trong việc in một biến cục bộ hoặc toàn cục hoặc mảng.Xây dựng không có tối ưu hóa với gfortran cho phép in toàn cầu biến nhưng vẫn không mảng toàn cầu. – rks171
- 1. truy cập các biến trong phiên gỡ rối với ipython và% pdb trên
- 2. Có một API tương đương với Trình truy cập/trình gỡ rối mã thông báo truy cập Facebook không?
- 3. ẩn các biến không tồn tại trong trình gỡ rối java Eclipse
- 4. Trình gỡ rối Facebook không tải các thẻ meta động
- 5. Mục tiêu-C: các biến mẫu nằm ngoài phạm vi trong trình gỡ rối
- 6. Gỡ rối các truy vấn tìm kiếm Solr trên Sunspot
- 7. PHP & Twig: Rắc rối truy cập vào các biến trong mẫu
- 8. Trình biên dịch Mono có thể được sử dụng trong một bối cảnh gỡ rối không?
- 9. Các biến không được khởi tạo trong Fortran 2003
- 10. Gỡ rối deadlock trong Sql Server 2008
- 11. Trình gỡ rối MSIL - Mdbg, Dbgclr, Cordbg
- 12. Trình gỡ rối PHP cho Eclipse
- 13. Trình gỡ rối JavaScript miễn phí?
- 14. Tại sao tôi không thể sử dụng chuỗi mới trong trình gỡ rối?
- 15. Trình điều khiển web Selenium có thể truy cập vào các biến toàn cầu javascript không?
- 16. Có thể đính kèm trình gỡ rối vào tiến trình PHP đang chạy không?
- 17. biến là không thể truy cập trong angular.forEach
- 18. Không thể truy cập biến thành viên cha trong Python
- 19. Truy cập các biến tĩnh
- 20. Làm thế nào để xem nội dung của biến NSDictionary trong trình gỡ rối Xcode?
- 21. Có trình gỡ rối dòng lệnh Scala không?
- 22. Trình hiển thị trình gỡ rối Visual C++?
- 23. Hiểu Xcode trình gỡ rối var hiển thị
- 24. Các lỗi ngoại lệ nhất định chỉ xảy ra trong trình gỡ rối không?
- 25. Không thể truy cập các biến toàn cầu trong dispatch_async: "Biến không thể gán được (thiếu thông số loại _block)"
- 26. Trình gỡ rối từ xa của trình tạo Qt
- 27. Không thể sử dụng flask.g để truy cập các biến trong các chức năng khác
- 28. Không thể truy cập attr_accessor biến được xác định
- 29. Cách xem chi tiết ngoại lệ trong trình gỡ rối mà không gán biến cho ngoại lệ?
- 30. cách sử dụng "Chọn ứng dụng gỡ rối" và "chờ trình gỡ rối" tính năng mới trong đậu thạch?
Bạn đang biên soạn với cờ -O0 và -G? –
Tôi đã nhìn thấy điều này, và những gì tôi đã làm là để kèm theo các biến trong một loại người dùng, và giữ một bản ghi toàn cầu (đã lưu). Sau đó, bạn truy cập vào trình gỡ lỗi với% (ví dụ: OT% POINT_COUNT khi OT chứa số gobals của tôi) – ja72
Để các nguyên tử Nick, biên dịch với -O0 thực hiện thủ thuật, nhưng chỉ với các phần tử không phải mảng. Tôi đọc rằng tối ưu hóa có thể gây ra các biến toàn cầu để không thể truy cập được, nhưng tôi nghĩ rằng nếu không có cờ tối ưu nào được sử dụng, thì trình biên dịch không tối ưu hóa theo mặc định. Rõ ràng, tôi đã sai. Tuy nhiên, tôi vẫn không thể truy cập bất kỳ thông tin nào trong mảng toàn cầu của mình. Một lần nữa, chúng đang được đọc và gán giá trị một cách chính xác, nhưng tôi không thể in toàn bộ mảng hoặc bất kỳ phần tử riêng lẻ nào trong mảng trong trình gỡ rối. – rks171