在(混合).NET 代码中捕获 C 运行时库致命错误?
我有一个项目,其中包含一个调用几个 C++/CLI DLL 的 C# 应用程序。如果我在本机代码中出现 Visual Studio C 运行时库致命错误,则似乎无法捕获它。
举一个简单的例子,如果我将其放入本机代码中:
wchar_t buf[1]; ::wcscpy_s(buf, 1, L"ab");
应用程序将崩溃(在发布版本中)。它不会抛出异常,并且我无法使用 __try...__ except 捕获它。
我想捕获这些类型的错误,这样我就可以显示一个漂亮的错误对话框,最好带有调用堆栈。我愿意创建一个小型转储,但我尝试通过在 C++/CLI DLL 之一中调用 ::SetUnhandledExceptionFilter() 来创建小型转储,但这似乎也不起作用。
有没有办法优雅地处理 .NET 应用程序中的 C 运行时库致命错误?
I have a project that consists of a C# application that calls into a couple of C++/CLI DLLs. If I have a Visual Studio C Runtime Library fatal error in the native code, there appears to be no way to catch it.
To give a simple example, if I put this in the native code:
wchar_t buf[1]; ::wcscpy_s(buf, 1, L"ab");
The app will crash (in release builds). It doesn't throw an exception and I can't catch it with __try...__except.
I'd like to catch these kinds of errors so I can display a nice error dialog, ideally with a callstack. I'd settle for creating a minidump, but I tried creating a minidump by calling ::SetUnhandledExceptionFilter() in one of the C++/CLI DLLs but that doesn't appear to work either.
Is there any way to gracefully handle a C Runtime Library fatal error in a .NET application?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您可以控制 C++ 代码,那么您可以安装验证处理程序,以使安全字符串函数等返回错误,而不是中止整个应用程序。请参阅此。
一个简单的示例显示您甚至可以将错误转换为托管异常并干净地退出:
If you have control of the C++ code then you can install a validation handler to make things like the safe string functions return an error rather than aborting the entire applicaiton. See this.
A simple example showing you can even convert the error to a managed exception and exit cleanly: