答案 0 :(得分:4)
我手边没有安装检查,但是文档说包GNAT.Source_Info"提供的子程序可以访问编译时已知的源代码信息,例如当前文件名和行号。"和adacore有spec for the package(通过Christoph)
答案 1 :(得分: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;
答案 2 :(得分:0)
另一种方法是在异常上打印堆栈跟踪。有一些GNAT binder参数可以存储堆栈跟踪(-E?),然后您可以使用Ada.Exceptions包打印它们。还有一个包可以在任何一点或异常情况下打印堆栈(我总是为所有任务提供最后的处理程序)。见http://rosettacode.org/wiki/Stack_traces#Ada
根据我的经验,异常上的堆栈跟踪是查明问题的理想选择。