Windbg 如何从中获取堆栈跟踪的线程ID!DAE?

Windbg 如何从中获取堆栈跟踪的线程ID!DAE?,windbg,Windbg,这是我第一次问一个问题,我承认,在用户模式调试方面,我是一个一流的初学者。以下是我想做的: 我已经通过使用获得了异常和计数!dae和我选择了一个具有调用堆栈的。我想查看此调用堆栈中传递给函数的参数,因此我假设需要切换到包含此异常的线程,并使用kb命令查看参数地址 我已经试过了!threads命令,虽然它确实列出了线程,但在“异常”列下没有显示异常。如注释中所述!dae是一个旧命令,它只列出堆上可用的异常对象。许多异常都没有被抛出。该命令类似于,但可能不完全相同!转储堆类型异常 我选择了一个有调用

这是我第一次问一个问题,我承认,在用户模式调试方面,我是一个一流的初学者。以下是我想做的:

我已经通过使用获得了异常和计数!dae和我选择了一个具有调用堆栈的。我想查看此调用堆栈中传递给函数的参数,因此我假设需要切换到包含此异常的线程,并使用kb命令查看参数地址

我已经试过了!threads命令,虽然它确实列出了线程,但在“异常”列下没有显示异常。

如注释中所述!dae是一个旧命令,它只列出堆上可用的异常对象。许多异常都没有被抛出。该命令类似于,但可能不完全相同!转储堆类型异常

我选择了一个有调用堆栈的

那当然是个好主意。但是,请注意,此异常可能已被捕获并已被处理或将被捕获并处理

我假设我需要切换到包含此异常的线程

该命令将为~s:

~:螺纹 :例外 s:选择/切换到 要使其工作,必须在继续阅读时抛出异常

使用kb命令查看参数地址

这将不起作用,因为k命令是为本机堆栈设计的,而不是为托管堆栈设计的。对于.NET,您需要!clrstack-p。与kb一样,这只适用于真正的调用堆栈,而不适用于附加到异常的调用堆栈

我已经试过了!threads命令,虽然它确实列出了线程,但在“exception”列下没有显示异常

这可能意味着您运气不好,并且该异常不会立即抛出

以下命令可能有助于澄清:

.exr-1:获取最后一个异常。如果给出0xE0434F4D,则引发.NET异常。如果不是这样,你很可能就不走运了。 !pe:打印在您的案例中不太可能引发的托管异常。
因为我假设两者都不会给你你期望的结果,所以问题是:你是如何以及何时进行崩溃转储的。如果要分析崩溃,需要在应用程序崩溃时进行崩溃转储。不在之前也不在之后。看看要考虑的事情。在您的情况下,如果您不使用未处理的异常处理程序,则使用-e命令行开关或似乎合适。

!dae是旧.net 1.1 sos.dll中的旧命令。这是一个如此古老的.net程序吗?