问题标签 [sosex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1004 浏览

.net - 获取 LOH 中的对象实例列表

我在托管堆中有数百个MyClass实例。其中一些在大对象堆中。下面是各种堆结构的外观

我的问题是
1. 如何找到大对象堆中所有MyClass实例的地址。2. 有没有办法在大对象堆中的MyClass
实例上运行 !ObjSize ?

0 投票
1 回答
464 浏览

c# - 有没有办法在通过 SOS.dll 分析转储文件时检查是否触发了垃圾收集

我正在分析“OutofMemory”异常的 .dmp 文件。对象在内存中停留的时间很长,那么有没有一个命令可以检查垃圾收集是否是通过使用 SOS.dll 或 SOSEX 触发的?

0 投票
1 回答
1125 浏览

windbg - 获取在其调用堆栈中包含某个 .NET 函数的线程?

我有一个带有 73 个线程的用户模式转储。其中一些是托管的,其中一些是本地的。我想找到托管线程,它的调用堆栈包含某个托管函数。

我在调试器中加载了SOSEX扩展。

现在我会~*e !mk转储所有托管线程,然后手动浏览它们以寻找我需要的东西 - 太长而且令人厌烦。

有没有更好的办法?

0 投票
0 回答
138 浏览

c# - 警告:此地址有多个托管方法

我遇到了一个 C# 应用程序问题,该应用程序可能会在没有警告或有意义的信息的情况下随机崩溃。相同的数据可以通过应用程序,但不会同时崩溃,有时甚至不会崩溃。

我使用 WinDbg 来获取有关异常的一些信息。有一个NullReferenceException被抛出和一个Access Violation错误。

使用 SOSEX,我有一个使用!mk. 我有一个堆栈,顶部有以下内容:

开头的行[WARNING: Multiple managed methods at this address]似乎特别令人担忧——这是什么意思?

从下往上看堆栈,到目前为止一切看起来都还不错。然后一个随机的方法调用IEnumerable.FirstOrDefault抛出它。该VersionedSettings.GetSetting(...)方法不进行此类调用。这就是为什么我有点困惑。

编辑:我!verifyheap在 WinDbg 中运行,输出是“未检测到堆损坏。”。我对 WinDbg 的了解有限,所以我不确定这个命令有多准确,但我认为值得添加。

有人知道发生了什么吗?

0 投票
1 回答
397 浏览

clr - 在 CDB/WinDbg 内的托管堆栈中从堆栈帧导航到堆栈帧

我收到了十几个转储文件。使用 windbg/sosex 命令!dumpstack -EE,他们中的很多人最后都会显示这些行:

不幸的是,尝试获取局部变量!clrstack -a并没有给我合理的结果:

有没有办法移动到最后一帧之外的另一帧?(以便在此框架中获取本地人)。

在本机模式下,我可以这样做:

然后我可以在前一帧中有当地人

我想知道如何对托管堆栈执行相同的操作,以便我可以!clrstack -a在以前的帧中执行此操作。我也想知道这个堆栈帧中的函数参数值/引用。

是否有执行此类操作的命令?

0 投票
0 回答
80 浏览

.net - 如何找到相关的 SqlCommand 对象

我正在寻找高内存问题的转储文件。该转储文件中突出的一件事是超过 300,000 个 DataRow 对象。我们对存储在内存中的 DataTable 对象的 sql 数据库运行查询。我想知道是什么查询负责创建这么多 DataRow 对象。我可以在 DataRow 和 DataTable 对象中看到各种字段,但无法弄清楚如何找到相关的 SqlCommand 对象,因为这应该让我可以访问 CommandText 并因此访问查询。有人可以帮我弄清楚如何获取 SqlCommand 对象吗?

0 投票
1 回答
212 浏览

windbg - 从循环中运行命令

我想从以下命令对每个地址运行 !refs 命令

如何做到这一点。我知道可以按如下方式创建一个循环

但是我怎样才能访问可以在循环中使用!refs 的对象地址?

0 投票
0 回答
165 浏览

c++ - DebugDiagv2 显示导致最大泄漏的 UNKNOWN_MODULE

最大的内存消耗函数是 DomainBoundILStubClass.IL_STUB_PInvoke(UInt32)。该模块的基地址是 0x00000000,所以这可能就是它是“UNKNOWN_MODULE”模块的原因。以下是功能详情:

功能详情

在堆栈跟踪的顶部或顶部附近,此函数的堆栈为零,所以我不知道是什么在调用它。

我假设这是聚合所有对 malloc 的 pinvoke 调用。那是对的吗?由于“分配类型”是 C/C++,这是否还包括对 operator new 的 pinvoke 调用?

0 投票
0 回答
263 浏览

.net - !dumpmt 在分析 .NET 方法表时与 !dd 相矛盾

我正在使用 WinDBG 和 SOS 检查 .NET 对象内部。我有一堂有 3 种方法的课。当我使用命令转储方法表时,!dumpmt -md [address]我得到了 8 种方法的描述。

当我使用命令转储内存时,我dd [address]找不到 3 种方法(见图 - 粉色框)。值 0x0003(在红色圆圈中)接缝也很奇怪,因为它应该代表方法的总数(包括虚拟),但它只代表非虚拟方法的数量。黑盒中的值代表什么?

在此处输入图像描述

0 投票
2 回答
184 浏览

windbg - !objsize 十六进制和十进制的差异

我使用!objsize命令来获取对象的真实值。例如,当我运行下面的命令时,它告诉我地址​​ 00000003a275f218 的对象大小是十六进制的 18,转换为十进制的 24。

到目前为止,一切都很好。我在一个对象上运行相同的命令,它的大小似乎在十六进制和十进制之间存在差异。 在此处输入图像描述

所以十六进制的大小是 0xafbde200。当我使用我的 calc 将其转换为十进制时,这是2948456960而命令的输出显示十进制大小为-1346510336。有人可以帮我理解为什么尺寸不同吗?