set_unexpected() 的 .Net 等效项

发布于 2024-07-07 17:18:07 字数 282 浏览 10 评论 0原文

.net 是否有相当于 C++unexpected()/set_unexpected() 功能的?


编辑:抱歉 - 我之前省略了一些细节:

语言:C# 2.0

我有一些遗留应用程序似乎在某处抛出一些未处理的异常。 我只是想采取一些措施来阻止客户的痛苦,直到我能够追踪到问题的实际根源。 据我所知,在 C++ 中,当未处理的异常冒泡到主例程时,set_unexpected() 指向的函数就会被调用。 因此我对 .net 等效功能提出了疑问。

Is there a .net equivalent to the C++ unexpected()/set_unexpected() functionality?


Edit: Sorry--I omitted some details previously:

Language: C# 2.0

I have some legacy apps that seem to be throwing some unhandled exception somewhere. I just want to put something in place to stop the customer's pain until I can trace the actual source of the problem. In C++, the function pointed at by set_unexpected() gets called, as far as I know, when an otherwise unhandled exception bubbles to the main routine. Hence my question about a .net equivalent functionality.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠北森屋 2024-07-14 17:18:07

根据应用程序的类型,有 3 种可能的情况用于处理未处理的异常:

  1. 对于 Windows 窗体应用程序,将事件处理程序挂钩到 Application.ThreadException
  2. 对于命令行应用程序,将事件处理程序挂钩到 AppDomain.UnhandledException
  3. 对于 ASP.NET 应用程序,在 Global.asax 中创建:

    protected void Application_Error(Object sender, EventArgs e)

免责声明:我不是 C++ 开发人员,但是从我读到的内容来看,这应该可以回答你的问题。

There 3 possible scenarios for handling unhandled exceptions, based on the type of the application:

  1. For windows forms application, hook an event handler to Application.ThreadException
  2. For commandline applications, hook an event handler to AppDomain.UnhandledException
  3. For ASP.NET applications, in Global.asax, create:

    protected void Application_Error(Object sender, EventArgs e)

DISCLAIMER: I'm not c++ developer, but from what I read, this should answer your question.

战皆罪 2024-07-14 17:18:07

这些处理程序应该捕获混合模式应用程序中大多数意外的异常。

private delegate long UnhandledExceptionFilter(IntPtr exception);

[DllImport("KERNEL32.DLL", SetLastError = true)]
private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);

// put these in your bootstrapper
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Application.ThreadException += ApplicationThreadException;
SetUnhandledExceptionFilter(UnhandledExceptionFilter);

void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ...
}

void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
    ...
}

long UnhandledExceptionFilter(IntPtr exception)
{
    ....
}

These handlers should catch most unexpected exceptions in your mixed-mode application.

private delegate long UnhandledExceptionFilter(IntPtr exception);

[DllImport("KERNEL32.DLL", SetLastError = true)]
private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);

// put these in your bootstrapper
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Application.ThreadException += ApplicationThreadException;
SetUnhandledExceptionFilter(UnhandledExceptionFilter);

void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ...
}

void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
    ...
}

long UnhandledExceptionFilter(IntPtr exception)
{
    ....
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文