gpt4 book ai didi

c# - Procdump -e 在非致命异常上创建转储

转载 作者:行者123 更新时间:2023-11-30 18:19:22 28 4
gpt4 key购买 nike

我一直认为自己在捕获转储方面相当有经验,但这个真的让我感到困惑。我有一个定期崩溃的 .net 进程......我不知道它崩溃的原因是什么,它是在 native 代码还是托管代码中崩溃,甚至是进程本身正在触发异常或第 3 方 DLL。我所知道的是它正在崩溃。我正在尝试使用 procdump 获取崩溃的转储,但我真的很挣扎。我按如下方式设置 procdump:

procdump processname.exe -ma -e

问题是,在执行此操作后的几分钟内,procdump 将生成转储并退出……即使该进程从未真正崩溃过。如果我添加 -g,我仍然得到相同的结果......几分钟后,procdump 将生成一个转储并退出。如果我再次启动它,同样的事情会发生。我打开了它生成的一些转储,它们没有任何 native 异常上下文。因此,我转储了所有托管线程的所有托管调用堆栈,并且(在我目前检查过的所有转储中)我发现了类似于此调用堆栈的内容:

System.Threading.WaitHandle.WaitAny
System.Runtime.IOThreadTimer+TimerManager.OnWaitCallback
System.Runtime.IOThreadScheduler+ScheduledOverlapped.IOCallback
System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame
System.Threading._IOCompletionCallback.PerformIOCompletionCallback

我认为这个未处理的异常是导致 procdump 生成转储文件的原因。我做了一些搜索,找到了 UnhandledExceptionEventHandler 对象。所以我想这个过程必须有一些东西在那里捕获未处理的异常。或者这只是标准的 SEH 东西?

无论哪种方式,我都不太关心这些未处理的异常,我只关心导致崩溃的异常。有什么方法可以告诉 procdump 只在发生致命异常时创建转储?我不认为 -t 会起作用,因为它不会捕获异常,只会在进程正常终止时转储。我唯一的选择是转向 DebugDiag 之类的其他东西吗?

提前感谢您的任何建议

最佳答案

您实际上告诉 ProcDump 自己转储未处理的异常。

-e Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.

已引用 from here .

只要把它留在外面,你就不会得到未处理异常的转储:

procdump processname.exe -ma

关于c# - Procdump -e 在非致命异常上创建转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39096528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com