从StackTrace中指出错误位置-多线程
Pointing out Location of Error from StackTrace-Multiple Threads
我有以下代码可以在 winforms 应用程序
中使用 Program.cs
文件捕获未处理的异常
private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message);
MessageBox.Show(e.Exception.StackTrace.ToString());
MessageBox.Show(e.Exception.TargetSite.ToString());
Application.Exit();
}
我正在使用 images.I 不断收到此异常
Object is Currently in use elsewhere
应用程序同时使用 2 个后台工作程序。
我一直试图从错误中指出确切的 location/line 数字。
这就是我从堆栈跟踪中得到的
如何定位错误的确切位置?这样我就可以采取适当的措施来纠正这个问题。
您需要使用 Windows 调试工具,例如 Adplus,Windbg or a MemoScope.Net, a relatively new Graphical tool which internally use clrmd。想法仍然存在,像 Crash、Hang 这样的系统问题,尤其是在多用户/多线程环境中由于同步、数据结构/内存损坏而发生的问题,需要通过在 运行 处创建快照/转储来调试-time,需要使用正确的 Pdb 文件(程序调试数据库)进行分析,以便可以检查线程堆栈,其中发生异常/死锁,从而可以调用纠正措施。
光看你提供的信息,很难猜出是哪里出了问题,但我猜是因为你有多个后台worker在做处理,所以访问资源需要同步,使用 lock
或类似结构,因此不会有多个线程同时尝试访问它。
另一个问题仍然存在,为什么在当天使用后台工作程序,为什么不使用 Async Await,这将是更清晰的实现,并且不会面临多线程的挑战,因为它不会在单独的线程上分派调用。
我有以下代码可以在 winforms 应用程序
中使用Program.cs
文件捕获未处理的异常
private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message);
MessageBox.Show(e.Exception.StackTrace.ToString());
MessageBox.Show(e.Exception.TargetSite.ToString());
Application.Exit();
}
我正在使用 images.I 不断收到此异常
Object is Currently in use elsewhere
应用程序同时使用 2 个后台工作程序。 我一直试图从错误中指出确切的 location/line 数字。
这就是我从堆栈跟踪中得到的
如何定位错误的确切位置?这样我就可以采取适当的措施来纠正这个问题。
您需要使用 Windows 调试工具,例如 Adplus,Windbg or a MemoScope.Net, a relatively new Graphical tool which internally use clrmd。想法仍然存在,像 Crash、Hang 这样的系统问题,尤其是在多用户/多线程环境中由于同步、数据结构/内存损坏而发生的问题,需要通过在 运行 处创建快照/转储来调试-time,需要使用正确的 Pdb 文件(程序调试数据库)进行分析,以便可以检查线程堆栈,其中发生异常/死锁,从而可以调用纠正措施。
光看你提供的信息,很难猜出是哪里出了问题,但我猜是因为你有多个后台worker在做处理,所以访问资源需要同步,使用 lock
或类似结构,因此不会有多个线程同时尝试访问它。
另一个问题仍然存在,为什么在当天使用后台工作程序,为什么不使用 Async Await,这将是更清晰的实现,并且不会面临多线程的挑战,因为它不会在单独的线程上分派调用。