Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 我的托管应用程序中的哪个线程导致了崩溃?_.net_Debugging_Windbg - Fatal编程技术网

.net 我的托管应用程序中的哪个线程导致了崩溃?

.net 我的托管应用程序中的哪个线程导致了崩溃?,.net,debugging,windbg,.net,Debugging,Windbg,我的windbg技能有点生疏,如果这是显而易见的,请原谅我 3个线程有针对它们的异常。这是否意味着它们位于每个线程的堆栈顶部?我不明白这是怎么发生的,因为第一个异常会导致未处理的异常处理程序启动并使我的应用程序崩溃。下面是简短的输出 !threads 0 1 1e5c 0015c008 2006020 Enabled 00000000:00000000 0015a4a8 6 STA 2 2 2734 00176740 b220 Enabled

我的windbg技能有点生疏,如果这是显而易见的,请原谅我

3个线程有针对它们的异常。这是否意味着它们位于每个线程的堆栈顶部?我不明白这是怎么发生的,因为第一个异常会导致未处理的异常处理程序启动并使我的应用程序崩溃。下面是简短的输出

!threads

   0    1 1e5c 0015c008   2006020 Enabled  00000000:00000000 0015a4a8     6 STA
   2    2 2734 00176740      b220 Enabled  00000000:00000000 0015a4a8     0 MTA (Finalizer)
   4    3 1f64 001b22d0   880b220 Enabled  00000000:00000000 0015a4a8     0 MTA 
  25   14 2714 0897ef78   180b220 Enabled  39e4bf38:39e4cbec 0015a4a8     0 MTA (Threadpool Worker)
  29   19 1884 0898a3b8  1000b221 Disabled 39f36d50:39f38bec 0015a4a8     0 MTA System.Threading.ThreadAbortException (39f36bf8)
  71   57 164c 274b41f0      b220 Enabled  39ef4098:39ef4bec 0015a4a8     4 MTA System.NullReferenceException (39ef3028)
  72   58 223c 274b1110   200b220 Enabled  00000000:00000000 0015a4a8     0 MTA
 107   83 1e60 275fe008      b020 Enabled  00000000:00000000 0015a4a8     0 MTA System.ObjectDisposedException (1e66684c)

您可以在“调试->事件过滤器”下设置希望WinDbg中断的异常。我没有使用WinDbg进行.net调试,但我以前使用过这些事件过滤器捕获特定的已处理异常,以获取违规代码的调用堆栈


当然,发生许多已处理的异常是很正常的,因此我不知道应用程序状态的真正含义,但您应该能够切换线程、转储调用堆栈并检查异常上下文记录,或者设置是否希望WinDbg在这些异常发生时中断,然后在它们发生时比较调用堆栈,点击go,并通过启用/禁用它们作为消除过程来查看是否崩溃。

代码>!threads命令输出每个线程的最后一个异常。由于所有线程都可能同时发生异常,因此您可以看到多个异常,但根据我的经验,这并不常见

但是,我注意到输出中列出了107个线程id,因此我假设应用程序创建了很多线程。我还注意到一些线程持有多个锁。可能一个或多个线程在堆栈上仍然存在异常的状态下被阻塞


手头的信息很难说得更具体

通常,如果在windbg中打开崩溃转储,它会给出导致崩溃的异常 一旦加载了崩溃转储。您应该会在windbg中看到与此类似的消息

“此转储文件中存储了感兴趣的异常。 存储的异常信息可以通过.ecxr访问。 (1890.da0):堆栈溢出-代码c00000fd(第一次/第二次机会不可用)

导致异常的线程应该与您在
加载崩溃转储后,单击windbg的左下角。

好的,因此似乎无法确定是哪个线程导致调试器调用。

感谢您的回复。这实际上是一个来自用户机器的难以重新编程问题的崩溃转储,因此异常已经发生。只是想找出是哪个线程导致了崩溃!您应该仍然能够遍历每个线程,转储调用堆栈并检查寄存器,如果抛出异常,则返回异常上下文,但这可能很难,因为它是第三方转储。Mine说:存储的异常信息可以通过.ecxr访问。(1ecc.1e5c):唤醒调试器-代码8000007,这不是非常有用!