一个应用程序处于中断模式找不到报错源头的问题

发布于:2022-07-26 ⋅ 阅读:(789) ⋅ 点赞:(0)

这次碰到这个事情的困扰是,调用堆栈距离我自己的实际出错的代码太远了,根本不知道是哪一句出的错(补充:这种情况大多是多线程的场景下发生的)

当前线程找不到, 输出栏里异常的信息也确实全部是外部代码,反正就是找不到,按照网上任意找的一个说法啊,先去掉了调试选项里的“仅我的代码”选项

结果没有什么区别,只是把在输出栏里的StackTrace可以在报错中展示出来而已,并解决不了我的问题

细品了一下报错,是在dispatcher里,结合之前报了很多错在创建helix中的mesh时使用的材料没有freeze,去检查了一遍material的freeze有没有漏的,结果是没有。

第二天,解决了,道路是曲折的,今天解决这个事情的主要想法就是,这应该是dispatcher线程里出的错,所以那个线程的stacktrace里没有我的代码,因为本来就是没有。

显示把所有的dispatcher的invoke封装了一层,在里面加了一个try-catch,然后如果catch到了,则将其作为begininvoke的返回值,判断如果返回值不为null则直接throw,这样在主线程就可以捕获到这个错误了(此处感谢@几何螃蟹)

结果是不行,还是有这个错。进一步想一下,一定是因为错误不是出在dispatcher的invoke里,一顿学习搜索,最终有效果的方案是这样的:

1、写一个handler来捕获DispatcherUnhandledException

 参考:Handling System.ArgumentException in WindowsBase.dll

2、将报错事件的handled设为true,以防止程序崩溃;

参考: Application.DispatcherUnhandledException Event (System.Windows) | Microsoft Docs

3、在此handler捕获的事件参数中可以查看stacktrace找到真正的错误出在了哪里

 ??


网站公告

今日签到

点亮在社区的每一天
去签到