gnat ada中的c宏\uuuuu行\uuuuu、\uuuuuu文件\uuuuuu、\uuuuuu函数\uuuu等效项

gnat ada中的c宏\uuuuu行\uuuuu、\uuuuuu文件\uuuuuu、\uuuuuu函数\uuuu等效项,c,macros,ada,gnat,C,Macros,Ada,Gnat,对于\uuuu行,\uuuu文件,\uuu函数,是否有等效的in?这些在错误消息中非常有用,可以快速找到代码中的错误。也许还有另一个概念来实现同样的目标。对不起,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您可能需要编写一个简单的perl脚本(或类似的脚本)来预运行代码,以模拟\uuuu LINE\uuuu和\uuu

对于
\uuuu行
\uuuu文件
\uuu函数
,是否有等效的in?这些在错误消息中非常有用,可以快速找到代码中的错误。也许还有另一个概念来实现同样的目标。

对不起,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您可能需要编写一个简单的perl脚本(或类似的脚本)来预运行代码,以模拟
\uuuu LINE\uuuu
\uuu FILE\uuuu
,但是
\uu func\uuuuu
将更加困难,因为这意味着实际解析代码

啊,原来它存在于蚊虫体内。例如:

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;

我手头没有要检查的安装,但文档中说该包“提供了子程序,可以访问编译时已知的源代码信息,如当前文件名和行号。”adacore有(通过Christoph)

另一种方法是在异常时打印堆栈跟踪。有一些GNAT binder参数来启用堆栈跟踪(-E?)的存储,然后您可以使用Ada.Exceptions包打印它们。还有一个包可以在任何时候或从异常事件打印堆栈(对于所有任务,我总是有一个最后的处理程序)。看


根据我的经验,异常上的堆栈跟踪是查明问题的理想方法。

有关获取
文件:行、过程的文档代码,请参阅:
:带有GNAT.Source\u信息
Put\u行(GNAT.Source\u Info.Source\u Location&“,”和NAT.Source\u Info.封闭的\u实体)修复了答案中Christoph的链接: