之前已经问过这个问题,并且有特定于Windows的答案,但没有令人满意的gcc答案.我可以set_terminate()用来设置一个函数,terminate()当抛出未处理的异常时,该函数将被调用(代替).我知道如何使用backtrace库从程序中的给定点生成堆栈跟踪.但是,当我的终止替换被调用时,这将无济于事,因为此时堆栈已被解除.
然而,如果我只是允许程序abort(),它将产生一个核心转储,其中包含从抛出异常的点开始的完整堆栈信息.所以信息就在那里 - 但是有没有一种编程方式来获取它,例如它可以被记录,而不是必须检查核心文件?
c++ callstack exception-handling stack-trace unhandled-exception
.NET中的AppDomain.UnhandledException和Application.DispatcherUnhandledException有什么区别?
我需要一个在发生任何未处理的异常时触发的事件.我遇到过这两个,但我不知道他们在哪些方面彼此不同.还有,有没有被解雇的情况?
当async等待的方法抛出异常时,异常存储在某处并且抛出它会被延迟.在WinForms或WPF应用程序中,它用于SynchronizationContext.Current发布抛出异常.但是,在例如控制台应用程序中,它会在线程池上抛出异常并关闭应用程序.
如何防止async方法抛出的异常导致应用程序崩溃?
编辑:
我正在描述的问题显然是因为我有void async方法.看评论.
我有一个WPF应用程序,可以旋转几个线程.我在App.xaml.cs中定义了一个DispatcherUnhandledException事件处理程序,它显示详细的错误消息,每次UI线程遇到异常时都会调用此处理程序.问题在于子线程:它们未处理的异常永远不会得到处理.我该怎么做呢?
示例代码:
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show("detailed error message");
}
private void Application_Startup(object sender, StartupEventArgs e)
{
//...
//If an Exception is thrown here, it is handled
//...
Thread[] threads = new Thread[numThreads];
for(int i = 0; i < numThreads; i++)
{
threads[i] = new Thread(doWork);
threads[i].Start();
}
}
private void doWork()
{
//...
//Exception thrown here and is NOT handled
//...
}
Run Code Online (Sandbox Code Playgroud)
编辑:一旦发生未处理的异常,我想显示带有堆栈跟踪的错误消息,然后退出应用程序.
c# wpf multithreading exception-handling unhandled-exception
我想知道我是否可以捕获由我开始使用Process.Start(...)的另一个进程抛出的未处理异常
我知道我可以使用此链接捕获standered错误,但我想要的是捕获通常由.NET环境的Just In Time调试器捕获的错误,该窗口包含以下单词:"发生了未处理的异常在你的应用程序中.如果你继续,应用程序将忽略此错误并尝试继续.如果你单击退出,应用程序将立即关闭...."然后是异常消息,然后是"继续", "退出"按钮.
我在web.config中有以下内容:
<customErrors mode="On" defaultRedirect="Error">
<error statusCode="404" redirect="Error/NotFound" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
我有一个
[HandleError]
Run Code Online (Sandbox Code Playgroud)
在我的HomeController类的顶部.为了测试,我创建了一个简单抛出异常的动作..它重定向到我的
ErrorController/Index
Run Code Online (Sandbox Code Playgroud)
方法,但当它到达我的视图绑定到HandleErrorInfo我的模型为null所以我不知何故失去了对错误的引用.
我确信它与错误在重定向中丢失有关,所以我想看看我是否遗漏了一些东西,如果有人有建议我可以有一个显示Stacktrace和错误消息的视图.
c# asp.net-mvc unhandled-exception asp.net-mvc-4 asp.net-mvc-5
我们有一项服务,它将在应用程序域级别(通过Log4net)记录未处理的异常.
我们记录了:
2014-01-28 16:49:19,636 ERROR [49] FeedWrapperService - 未处理的System.NullReferenceException:未将对象引用设置为对象的实例.
此异常没有堆栈跟踪.如果不对异常对象做一些疯狂的事情,这怎么可能呢?
我们的处理代码:
AppDomain.CurrentDomain.UnhandledException += LogAnyExceptions;
private void LogAnyExceptions(object sender, UnhandledExceptionEventArgs e)
{
log.Error("unhandled", (Exception)e.ExceptionObject);
throw (Exception)e.ExceptionObject;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,重新抛出这一点毫无意义,因为AppDomain无论如何都会随着进程而下降,但我认为它不会影响我们的情况.
Windows应用程序事件查看器也只显示此null ref异常并且没有跟踪.
我已经测试了异常处理程序日志记录,它成功记录了堆栈跟踪和任何内部异常.如果它被我们的代码抛出,我们会看到堆栈跟踪.如果它被第三方c#库抛出,那么,我们再次看到至少一个方法的堆栈跟踪(无论是否是重新抛出的异常).在这里,我们看到一个没有堆栈跟踪的托管异常.我不知道这是怎么可能的.
查看反编译的第三方库,它与非托管代码进行对话,引发此异常的事件可能在非托管域中,但是如果没有堆栈跟踪,这种情况怎么会导致托管的空引用异常?
这个问题的原因是间歇性的.我们已经将这段代码在生产中运行了几个月,并且看过它曾经这样做过.这非常怪异.
普遍的共识是,应该将负责此类问题的系统推送到子进程中,这样我们就可以处理问题并安全地自动重启,但知道发生了什么事情会很好.
编辑以包含以下评论信息:
我的异常不是标准的重新抛出,因为堆栈跟踪是null或空.它没有重新投掷方法的名称.进一步挖掘,Exception类可以从序列化信息构造,看起来序列化信息可能包含堆栈跟踪的空字符串,并且可能创建它而不会导致其他错误.我想它可能来自那里,但我不知道它是如何起源的.
我正在尝试使用框架django启动webproject,这是我的第一个web开发项目.
在创建项目之后,我试图创建一个创建自定义用户的应用程序,并使用django-registration进行电子邮件验证注册
我得到的结果manage runserver如下图所示:
这是我的models.py文件包含的内容
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _
class User(AbstractUser):
username = models.CharField(max_length=255, unique=True, verbose_name=_("Username"))
email = models.EmailField(unique=True, verbose_name=_("Email Address"))
favorite_animal = models.CharField(max_length=255, verbose_name=_("Favorite Animal"))
Run Code Online (Sandbox Code Playgroud) python django unhandled-exception python-3.x django-migrations
我有一个.NET程序,其事件处理程序绑定到Application.CurrentDomain.UnhandledException.使用调试运行程序时,抛出未处理的异常时会触发此事件.但是,在没有调试的情况下运行时,事件不会触发.
我的问题是什么?
谢谢,安德鲁
我在WPF应用程序中遇到了一个非常棘手的缺陷,需要跟踪.错误消息是:
在布局/渲染过程中反复使TimeManager失效会导致无限循环.
堆栈跟踪(它的价值)是:
在System.Windows.Media.MediaContext.RenderMessageHandlerCore(对象resizedCompositionTarget)在System.Windows.Media.MediaContext.RenderMessageHandler(对象resizedCompositionTarget)在System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表回调,对象指定参数时,的Int32 numArgs)在MS .Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)
这是一个间歇性的缺陷,我唯一可以捕获它的地方是在app配置文件中,我正在捕获Application_DispatcherUnhandledException消息.我在我的应用程序中的所有内容都包含在try catch块中,然而这些内容最终会被捕获到未处理的异常中.
有没有人对此有任何见解?我在互联网上搜索了一些东西并且没有发现任何东西,并且想到这里可能有人可能有一些见解或想法如何追踪这一点.目前,我正在吞下这个异常并让应用程序继续运行,因为它似乎对它没有任何影响(除了崩溃).
c# ×7
.net ×3
wpf ×3
exception ×2
stack-trace ×2
asp.net-mvc ×1
async-await ×1
c++ ×1
callstack ×1
django ×1
python ×1
python-3.x ×1