在gnat ada中是否有c 宏 __LINE__
, __FILE__
,的等价物__func__
?这些在错误消息中非常有帮助,可以快速找到代码中的错误。也许还有另一个概念来归档相同的目标。?
问问题
888 次
3 回答
6
我手头没有要检查的安装,但文档说GNAT.Source_Info包“提供了可以访问编译时已知的源代码信息的子程序,例如当前文件名和行号。” adacore 有包的规格(通过 Christoph)
于 2014-09-11T13:16:25.760 回答
2
抱歉,__LINE__
and__FILE__
和其他__THING__
s 是 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;
于 2014-09-11T13:03:16.763 回答
0
另一种方法是在异常时打印堆栈跟踪。有一些 GNAT binder 参数可以启用堆栈跟踪 (-E?) 的存储,然后您可以使用 Ada.Exceptions 包打印它们。还有一个包可以在任何时候或从异常发生时打印堆栈(我总是为所有任务提供最后的处理程序)。见http://rosettacode.org/wiki/Stack_traces#Ada
根据我的经验,异常堆栈跟踪是查明问题的理想选择。
于 2014-10-06T21:58:39.833 回答