问题标签 [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 回答
255 浏览

debugging - sosex.mbm:设置命令参数

我经常需要在方法上设置断点,打印参数,并在特定参数上中断或在不匹配时继续。在本机代码中,我会使用bp <symbol> "commands". 但这是一个托管应用程序,因此该方法并不总是 JITted。因此,!sos.bpmd 可用;但是,它不支持命令参数。!sosex.mbm 是另一个选项,文档表明它可以接受命令参数。来自!sosex.help mbm

"command" - 可以指定一个带引号的字符串参数。此字符串的内容将作为命令参数传递到相应的本机断点。

有关这些选项的更多详细信息,请参阅“bp”命令的调试器文档。

这意味着它将这个命令参数传递给本机断点命令,例如bp. 但是,它无法解析同一bp命令能够接受的命令参数。

以下是我的尝试。

commands 参数似乎是有效的,并且可以按照我的意愿进行。这样的断点是一项频繁的任务,所以我更喜欢用一个命令来设置整个事情,而不是通过上述多个步骤。据我可以从sosex.mbm文档中确定,我应该能够执行以下操作:

它失败了,表明需要引号,但我无法确定在哪里。语法有点复杂,所以让我们尝试一些更简单的东西:

这次是语法错误,但我又无法确定在哪里。让我们试试另一个。

另一个错误,但这次是关于一个额外的字符,但对我来说看起来不错。让我们尝试一些更简单的事情。

终于成功了。我从中得出的结论是,sosex.mbm只要不包含多个语句,就只能接受单个命令参数。如文档所示,如果单个命令参数仅被传递到本机断点(例如 bp),则不应有此类限制。

这种行为是预期的还是我做错了什么?还有另一种方法可以做到这一点吗?我可以使用上面的解决方法,但是我经常需要设置这样的断点,所以宁愿找到一种更直接的方法来做到这一点。

请注意,我使用的是 sosex 的 4.5.0.783 版本。这是可供下载的最新版本。

0 投票
1 回答
519 浏览

.net - 如何识别数组类型?

我有一个 OutOfMemoryException,我想分析应创建的数组的大小和类型。

我为这种情况创建了一个演示目的转储,我能够获得以下信息:

所以我可以看到创建了一个新数组,大小为 7FFFFFFF,即 20 亿个项目。(请忽略您甚至无法在 32 位 .NET 应用程序中创建该大小的 byte[] 的事实,因此在此示例中,类型可能根本不重要。)

我现在读到数组的类型在 ECX 寄存器中,但不幸mscorlib_ni+0x4102 (78a44102)的是不是很有帮助。

我已经尝试过!mln!mdt甚至是不切实际!ip2mt的,但它们都没有显示预期bytebyte[]输出。有没有办法从 mscorlib 的本机映像中获取类型?

0 投票
1 回答
476 浏览

.net-4.0 - 转储文件中各代执行的 GC 次数

无论如何,是否可以从转储文件中获取有关为不同代执行了多少垃圾收集的信息。当我尝试运行一些 psscor4 命令时,我得到了关注。

虽然我可以从 eehpeap 获得输出,但它并没有给我我想要的东西。

0 投票
2 回答
1756 浏览

c# - Why psscor4 command will not run

For some reason, I cannot run any commands once I load psscor4. I have downloaded x64 of psscor4 from MS website and put it in same folder where windbg is. Before loading psscor4, I can run sos commands fine without any problem.

Once I load psscor4, I cannot run any sos commands

I can run these commands after prefixing sos. So !sos.do works fine. But problem is that I cannot run any psscor4 specific commands either. Any idea what could be wrong? I think the error that psscor4 outputting is misleading as I don't think any GC is happening when I attached windbg to this process.

EDIT Below is the configuration used for .NET 4.0. Which one of these could be used with psscor4 then? enter image description here

0 投票
3 回答
762 浏览

c# - 执行在可能的死锁中停止

经过一个月的休息后,我昨天继续研究我的程序。我没有更改代码上的任何内容,但现在我的应用程序不再启动。在某一时刻,它只是中断执行并且似乎陷入死锁,尽管我不确定它是否真的是死锁,因为它在方法返回时发生 - 在通常不应该发生的地方。

我不能给你看代码,因为它很大。但我可以肯定地说,除了它自己的线程之外,唯一的操作是访问一些由 Dispatcher 调用的 UI 元素。直到昨天一切正常,我没有改变任何东西。

这是它发生的地方:

调用代码:

任务启动并返回“t”。InitializeAddins() 方法成功运行以结束(使用调试器检查它 - 日志还显示它完全完成)。下一步是标记“动作”的声明行(完成时)。然后调试结束,没有任何事情发生。甚至没有调用这个 Dispatcher 钩子:

我唯一的假设是某处出现了僵局。我无法解释为什么整个执行停止并卡住了。我只是找不到任何线索从哪里开始搜索。我重新编写了新引入的代码并添加了一些扩展锁定方法,这些方法也可以检测死锁。到目前为止没有检测到死锁。

由于不知道是什么原因导致的,所以我尝试使用 WinDbg 和 SOSEX 来查找错误源。可悲的是,我没有让 WinDbg 运行。它确实检查了符号服务器,最后的输出如下:

CLRDLL:无法通过 mscorwks 搜索找到 mscordacwks_AMD64_x86_4.0.30319.34209.dll CLRDLL:无法在路径上找到“SOS_AMD64_x86_4.0.30319.34209.dll” 无法自动加载 SOS CLRDLL:已加载 DLL mscordacwks_AMD64_x863409DLL CLR 状态: 加载 DLL mscordacwks_AMD64_x86_4.0.30319.34209.dll

虽然它显然加载了一些东西,但我在调用 SOSEX 的 !dlk 命令时收到了这条消息:

0:028> !dlk 无法初始化 .NET 数据接口。需要 mscordacwks.dll 版本 4.0.30319.34209。找到并加载正确版本的 mscordacwks.dll。请参阅 .cordll 命令的文档。正在检查 CriticalSections... 未检测到死锁。

所以我真的不知道如何修复这个错误。这种行为可能是什么原因?我什至没有例外。我已经启用了 CLR 异常,但连那些都没有被抛出。这很奇怪,我通常认为这种锁定确实发生在中间的某个地方,而不是在方法退出之后......

0 投票
0 回答
83 浏览

.net - 实时调试 .NET 应用程序,!mt 命令只返回“无法解析调用目标。错误 = 0x80004005”

当我休息时:

并运行!mt我得到:

无法解析呼叫目标。错误 = 0x80004005

我认为应该发生的是调试器应该继续,然后中断:

我在 .NET 2.0 应用程序上使用 sosex.dll v4.5.0.692,WinDbg 6.3.9600.17298

有任何想法吗?

0 投票
1 回答
421 浏览

c# - 如何解释 mwaits 输出

我正在尝试了解如何使用 mwaits 命令,例如锁类型、锁所有者等。我知道其中一些可以通过 sos 命令完成,但我如何使用通过 sosex mwaits 命令获得的信息。

0 投票
1 回答
1311 浏览

.net - 大约 .NET 堆的 50% 的空闲对象。如何知道导致 OOM 的原因

我正在尝试确定导致我的应用程序高内存使用的原因。所以我拿了进程转储文件。EEHeap 命令在 .NET 内存堆中显示大约 2.8 GB。

奇怪的是,最大的入口!Dumpheap是消耗约 1.3 GB 的免费

其中一些在 LOH 中。

没有准备好完成的对象,这告诉我 Finalize 线程刚刚完成了它的工作。

LOH 似乎严重分散。

我不知道我是否在这里连接了所有点,但我的想法是,在下一次 GC 中,所有空闲对象都将从内存中删除,并且 .NET 堆内存应该根据 Gen 0 中的空闲对象下降, 1、2(因为它们会被压缩)。这是一个公平的声明,还是您看到我可能遗漏的任何其他问题?当然 LOH 碎片是一个问题,但我不知道这对应用程序利用率有多大影响。

编辑: Applicaton 现在开始因 OOM 失败。根据下面的一些评论,针对 Free 对象报告的内存不会返回给操作系统。我怎么知道是什么导致了OOM

0 投票
1 回答
514 浏览

.net - 计算对象的大小,使其包括其所有子项的大小和(孙子链)

假设 A 类包含 B 和 C 的实例。B 包含 D、E 和 F,而 C 包含 G、H 和 I 的实例。所以在计算 A 的大小时,我想包括其所有及其子项的大小项目。当我使用 !dumpheap -stats 命令时,A 的大小似乎并不包括其所有包含的孩子、孙子、孙子。

有什么方法可以在windbg中以这种方式获得A的大小?

0 投票
1 回答
283 浏览

c# - 使用 ClrMD 获取原始值

我有以下

如何获取 structValue 的值?

我尝试了以下但没有成功

('field' 是 Test 变量,'innerField' 是 Test.myStruct。两者都是 ClrInstanceField 类型)。