代码之家  ›  专栏  ›  技术社区  ›  erict

可以告诉Ada不要捕捉异常\访问\违规吗

  •  0
  • erict  · 技术社区  · 8 年前

    我们有一个大的艾达/C++系统(使用GnATPro 7.3.2)在Windows上运行,很少有严重的0xC090005 Windows内存违规。我试图通过创建一个小型艾达程序来简化,该程序调用C++库,库尝试写地址为0x07。但是在这种情况下,Ada子系统并没有得到预期的C0000005,而是报告了一个程序错误,其中包含消息EXCEPTION\u ACCESS\u违规和一个不错的堆栈跟踪。

    为了找到这个罕见的bug,我第一次写了一个C++程序,写入到地址7,这引起了C00 00的预期,但是这使用了MSVC运行时。我的小Ada程序显示了不同的行为。是否可以禁用捕获内存冲突的Ada运行时层?

    1 回复  |  直到 8 年前
        1
  •  0
  •   paulsm4    8 年前

    你实际上在问几个不同的问题:

    1. Q: (Windows)0xc0000005访问冲突和Ada程序错误/异常访问冲突之间有什么区别?

    What exactly is the scope of Access Violation '0xc0000005'?

    为了处理Ada程序错误,为什么不使用标准Ada“exception”块,例如:

    with Ada.Exceptions;  use Ada.Exceptions;
    ...
    exception
      when Error: EXCEPTION_ACCESS_VIOLATION =>
        Put ("Access Violation: ");
        Put_Line (Exception_Name (Error));
        Put (Exception_Message (Error));
      when Error: others =>
        Put ("Something Else: ");
        Put_Line (Exception_Information(Error));
    end;