首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >能告诉Ada不要去抓EXCEPTION_ACCESS_VIOLATION吗?

能告诉Ada不要去抓EXCEPTION_ACCESS_VIOLATION吗?
EN

Stack Overflow用户
提问于 2018-09-14 05:35:34
回答 1查看 441关注 0票数 0

我们有一个运行在Windows上的大型Ada/C++系统(使用Gnatpro 7.3.2),它很少会死机,并出现0xC0000005 windows内存冲突。为了简化,我创建了一个小的Ada程序,它调用了一个C++库,这个库试图写入地址0x07。但是在这种情况下,Ada子系统并没有得到预期的C0000005,而是报告了一个带有消息EXCEPTION_ACCESS_VIOLATION和良好堆栈跟踪的程序错误。

为了找到这个罕见的bug,我首先编写了一个写到地址7的C++程序,正如预期的那样导致了C000005,但它使用的是MSVC运行时。我的小Ada程序显示了不同的行为。是否可以禁用捕获内存冲突的Ada运行时层?

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 06:38:51

您实际上在这里问了几个不同的问题:

  1. 问:(Windows) 0xc0000005访问冲突和Ada程序ERROR/EXCEPTION_ACCESS_VIOLATION?
  2. Q:有什么区别?我可以在Ada应用程序中如何处理它?

要更好地理解0xc0000005,请查看以下内容:

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

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

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52322120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档