3

我在 Visual Studio 的输出窗口中有一个生成错误的报告。

在调用 ReportViewer 的实例之前,我尝试将 windbg 挂接到其中,这样我就可以检查数据的存储区域,尤其是数据源中的列名称与记录集中返回的数据。

我已经加载了额外的部分,如下所示:

.load C:\debug\psscor2\psscor2\amd64\psscor2.dll
.load C:\debug\psscor2\psscor2\amd64\wow64exts.dll

我还设置了符号的路径。

当以这种方式设置 windbg 时,如何定位感兴趣的 ReportViewer 线程并查看其结构和数据?

4

1 回答 1

3

您问的是一个非常笼统的问题,因此很难给出具体的答案,但这里有几点可以帮助您入门。

如果这是一个 32 位进程,您应该获取 32 位版本的 Windows 调试工具并改用它。

此外,如果您将 psscor2.dll 放在 sos.dll 旁边(即在 .NET 框架路径中),您可以这样做

.loadby psscor2 mscorwks

(如果您使用的是 .NET 4 或更高版本,请替换mscorwks为)。clr

这将从与 mscorwks.dll 相同的位置获取 psscor2。(此外,psscor 目前不适用于 .NET 4.5,因此在这种情况下,您需要改用 sos.dll)。

为了检查对象,您需要在堆上定位它们。该!dumpheap -stat命令将为您提供整个堆的概览。您可以使用!dumpheap -mt <MT of type>转储特定类型的对象。!name2ee您可以使用命令找到给定类型的 MT 。

一旦你在堆上获得了单个对象的位置,你可以使用!do(DumpObject) 命令来检查这些。

于 2012-12-20T16:53:24.850 回答