|
25
|
| BlueRaja - Danny Pflughoeft · 技术社区 · 13 年前 |
|
|
1
23
“更小的复制”在这里听起来绝对是个好主意。。。即使“更小”并不意味着“繁殖更快”。 在开始之前,请尝试在另一台机器上重现错误。如果你不能在另一台机器上复制它,那就需要进行一套完全不同的测试——硬件、安装等。 此外,请检查您是否使用了所有内容的最新版本。花几天时间调试它(恐怕很可能),然后得到一个“是的,我们知道这件事——这是.NET 4中的一个错误,在.NET 4.5中修复了”的响应,这会很烦人。如果你能在各种框架版本上复制它,那就更好了:) 接下来,删除程序中的所有内容:
所有这些都将逐渐缩小应用程序的大小,直到它变得更易于管理。在每一步中,你都需要再次运行该应用程序,直到它崩溃或你确信它不会崩溃。如果你有很多可用的机器,那应该会有所帮助。。。 |
|
|
2
10
tl;博士 确保编译到.Net 4.5 这听起来可疑地与发现的错误相同 here 。来自 MSDN page 以下为:
修复方法是编译到.Net 4.5。如果由于某种原因你不能这样做,你也可以
disable concurrent garbage collection
通过禁用
或者只是编译到
|
|
|
3
9
|
|
|
4
6
现在等待进程崩溃,日志文件由DebugDiag创建。现在激活选项卡 高级分析 ,在顶部列表中选择Crash/Hang Analyzers,在下部列表中选择dump file,然后点击 启动分析 。这将为您生成html报告。希望你能在报告中找到有用的信息。如果您在分析方面有问题,请将html报告上传到某个地方,并将url放在此处,这样我们就可以专注于此。 |
|
5
4
你可能会这么想,但线程、通过信号量进行同步、互斥它的任何句柄都是本机的。net是一个操作系统之上的层,.net本身不支持多线程应用程序的纯clr代码,这是因为操作系统已经这样做了。 这很可能是线程同步错误。可能有多个线程试图访问clr边界之外的共享资源,如文件etc。 您可能认为您没有访问com等,但当您调用某些API(如get desktop folder path等)时,它是通过shell com API调用的。 您有以下两个选项,
随着集合的增长,程序很可能在一段时间后失败,而操作在其他线程干扰之前无法执行。例如,生产者-消费者问题,你不会注意到任何问题,直到生产者变得更慢或在消费者介入之前无法完成其操作。 clr中的错误很少见,因为clr非常稳定。但写得不好的代码可能会导致clr中出现错误。Clr不能也永远不会检测到错误是在代码中还是在Clr本身中。 |
|
6
1
|
|
7
0
我建议您通过 http://support.microsoft.com 立即,因为支持人员可以向您展示如何收集必要的信息。 一般来说,就像@paulsm4和@pusulek所说的那样,您可以使用WinDbg或Debug-Diag来捕获进程的崩溃转储,并且在其中嵌入了所有必要的信息。然而,如果这是你第一次使用这些工具,你可能会感到困惑。Microsoft支持团队可以为您提供有关他们的分步指导,或者他们甚至可以与您建立实时会议会话来捕获数据,因为该程序经常崩溃。 一旦您熟悉了这些工具,将来您可以更容易地执行类似的故障排除, 顺便说一句,现在说“我发现了一个bug”还为时过早。尽管您在程序中显然找不到对本机代码的依赖,但它可能仍然依赖本机代码。我们不应该在进一步调查这个问题之前得出结论。 |