这次碰到这个事情的困扰是,调用堆栈距离我自己的实际出错的代码太远了,根本不知道是哪一句出的错(补充:这种情况大多是多线程的场景下发生的)
当前线程找不到, 输出栏里异常的信息也确实全部是外部代码,反正就是找不到,按照网上任意找的一个说法啊,先去掉了调试选项里的“仅我的代码”选项
结果没有什么区别,只是把在输出栏里的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找到真正的错误出在了哪里
??