是否有gnatada爲c macros__LINE__
,__FILE__
,__func__
等效?這些在錯誤消息中很有用,可以快速找到代碼中的錯誤。也許還有另一個概念來歸檔相同的目標。c宏__LINE__,__FILE__,__func__相當於蚊蚋ADA
1
A
回答
4
我沒有手頭上的安裝檢查,但文件說,包GNAT.Source_Info「規定的子程序,讓訪問在編譯時已知源代碼的信息,如當前文件名和行號。「並且adacore有spec for the package(通過Christoph)
1
對不起,__LINE__
和__FILE__
和其他__THING__
是C預處理器的功能,這是ada沒有的東西。你可以陪陪一個簡單的Perl腳本(或類似的)來預先運行你的代碼,以模擬__LINE__
和__FILE__
,但是__func__
會更困難,因爲這意味着實際上解析代碼。
啊,原來它存在於GNAT中。例如:
with Ada.Text_IO
GNAT.Source_Info;
use Ada.Text_IO
GNAT.Source_Info;
procedure source_error is
-- example of GNAT.Source_Info.Source_Location
i : integer;
j : integer := 0;
begin
i := 5/j; -- division by zero
exception when others =>
put_line(standard_error
Source_Location & ": exception raised");
end source_error;
0
另一種方法是在異常情況下打印堆棧跟蹤。有一些GNAT綁定器參數用於啓用堆棧跟蹤存儲(-E?),然後您可以使用Ada.Exceptions包打印它們。還有一個包可以在任何時候或者發生異常情況下打印堆棧(我總是對所有任務都有最後一個處理程序處理程序)。請參閱http://rosettacode.org/wiki/Stack_traces#Ada
根據我的經驗,異常堆棧跟蹤非常適合查明問題。
相關問題
- 1. __FILE__,__LINE__在C++
- 2. Haskell相當於C的__LINE__
- 3. R中是否有等價的C/C++ __FILE__和__LINE__宏?
- 4. 的Java相當於__func__
- 5. bash中`__FILE__`,`__LINE__`的等效
- 6. 在Pascal中是否有與C的__LINE__宏相當的功能?
- 7. 在使用__FILE__和__LINE__一個用戶定義的宏
- 8. RGB宏c#相當於
- 9. node.js是否有像__file__和__line__之類的C++預處理器宏?
- 10. 在C/C++中使用__LINE__和__FILE__的性能損失
- 11. 捕捉__LINE__和__FILE__沒有的#define
- 12. 已禁用__LINE__宏?
- 13. __FUNC__宏在斯卡拉2.10
- 14. 的Visual C++ 10和小寫的__FILE__宏
- 15. #include文件來自宏__FILE__?
- 16. 爲什麼Java Nashorn __DIR__,__LINE__和__FILE__爲空?
- 17. 在代碼中引用__FILE__和__LINE__以引用?
- 18. 在Ruby中,class_eval << - 「end_eval」,__FILE__,__LINE__是什麼意思?
- 19. __FILE__和__LINE__在內核代碼中如何展開?
- 20. 在Ruby中如何實現__LINE__和__FILE__常量?
- 21. 如何找到父函數的__FUNCTION__,__LINE__和__FILE__?
- 22. C++相當於C
- 23. 相當於C#
- 24. 函數名稱的預定義宏__func__
- 25. 在Emacs Lisp中是否有相當於Python的__file__
- 26. 是否有一個Java相當於如果__FILE__ == $ 0〜
- 27. __LINE__等效於Javascript
- 28. 如何在C中標記和大小__func__宏?
- 29. C/C++相當於C#System.Net.Mail
- 30. sbt 0.13相當於flatMap的任務宏
看到http://adacore.com/gap-static/GNAT_Book/html/rts/g-souinf__ads.htm的文檔 – Christoph 2014-09-11 13:30:50
代碼來獲得'文件:行,procedure': '與GNAT.Source_Info;' 'Put_Line(GNAT.Source_Info.Source_Location&「,」&NAT.Source_Info.Enclosing_Entity);' – StackUnderflow 2014-09-11 14:38:55
在答案中修復了Christoph的鏈接:https://www2.adacore.com/gap-static/GNAT_Book/html/rts /g-souinf__ads.htm – 2018-01-26 18:42:47