【问题标题】:Pointing out Location of Error from StackTrace-Multiple Threads从 StackTrace-Multiple Threads 中指出错误的位置
【发布时间】:2017-04-02 07:27:03
【问题描述】:

我有以下代码可以在 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();
        }

我正在处理图像。我不断收到此异常

Object is Currently in use elsewhere

应用程序同时使用 2 个后台工作程序。 我一直试图从错误中指出确切的位置/行号。

从堆栈跟踪中我得到了这个

如何找到错误的确切位置?以便我可以采取适当的措施来纠正这个问题。

【问题讨论】:

    标签: c# .net bitmap backgroundworker gdi+


    【解决方案1】:

    您需要使用 Windows 调试工具,例如 Adplus,WindbgMemoScope.Net,这是一种内部使用 clrmd 的相对较新的图形工具。想法仍然存在,像崩溃、挂起这样的系统问题,特别是在多用户/多线程环境中由于同步、数据结构/内存损坏而发生的问题,需要通过在运行时创建快照/转储来进行调试,这需要使用正确的 Pdb 文件(程序调试数据库)进行分析,以便可以查看线程堆栈,在其中发生异常/死锁,从而可以调用纠正措施。

    光看你提供的信息,很难猜,可能是哪里出了问题,但我的猜测是因为你有多个后台工作人员在做处理,因此对资源的访问需要同步,使用lock 或类似结构,因此不会有多个线程同时尝试访问它。

    还有一个问题,为什么现在是 Background worker,为什么不是 Async Await,这将是更简洁的实现,并且不会面临多线程的挑战,因为它不会在单独的线程上调度调用。

    【讨论】:

    • 问题是在工作异步事件中访问 GUI 元素,我将其移至工作完成并且问题已修复 :) .. 无论如何感谢您的帮助...
    • 欢迎,因为您了解应用程序和其他细节,因此更容易缩小范围,否则,这些工具是查找和修复此类非功能性问题的标准工具
    • 是的......我想我之前也遇到过类似的问题......当时花了很多时间来缩小原因。我认为这个问题现在已经解决了......五月需要更多测试。
    猜你喜欢
    • 2011-11-10
    • 2020-01-06
    • 2021-11-20
    • 2020-01-29
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2019-03-02
    相关资源
    最近更新 更多