问题标签 [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 投票
2 回答
2033 浏览

c# - sosex.mbp 或 sosex.mbm 设置的断点不起作用

我正在使用 VS.NET 2010。我编译了一个非常简单的 .NET 4.0 应用程序。

我打开windbg 6.12.0002.633编译的可执行文件。键入以下命令以加载 sosex

然后,输入以下命令来设置断点

然后运行程序。没有一个破发点被击中。

任何的想法?

* 编辑 *

在这里,我根据 Marc 的要求粘贴有关我的环境的更多详细信息

* 编辑 2012 年 8 月 17 日 *

感谢科林史密斯,我认为您得到了最接近的答案。我将我的程序编译为 32 位程序。切换到使用 32 位 Windbg 和 32 位 sosex。按照相同的步骤设置断点。现在,如果我这样做!mbl。断点列表的显示方式不同。

以前,我没有看到这条线(PENDING JIT)。继续程序,Windbg 成功停在断点处。

我不知道为什么 64 位程序不起作用。我仔细检查了我的 64 位 sosex.dll 和我的 64 位程序符号路径。一切看起来都是正确的。也许,这是 sosex.dll 中的错误?

我正在使用 .NET 4.0,并且我的 windbg 在 Windows 2008 R2 64 位中运行。

0 投票
1 回答
866 浏览

windbg - Breakpoint not working for SOSEX using !mbp

I'm trying to debug a C# application using SOSEX in WinDbg for 32 bit environment in .NET Framework 4.0. I use sosex.dll for 32 bit v4.0.

Here are the steps:

  1. sxe ld:mscorlib
  2. sxe ld:clrjit
  3. load Path to sosex.dll
  4. !mbp application.cs 34 (this sets breakpoint at line 34)

It works fine here.

However, when I start WinDbg fresh and attach to the C# application.exe process and do the necessary steps, the breakpoint doesn't work.

One thing I have observed is that the first time I ran the lm command in WinDbg, the output showed only application.exe.

But the next time, the lm command showed all the modules already loaded (clrjit, mscorlib, etc.)

Is this why the breakpoint isn't working?

0 投票
1 回答
204 浏览

windbg - 为什么 sosex!dlk 在 Windows 7 上永远运行?

我们最近从 Windows XP 迁移到了 Windows 7,自从迁移后,我发现我无法再在 WinDbg 中运行来自 Sosex 的 !dlk 命令,它只是永远运行。它曾经是一种在我们的代码中捕获死锁的便捷方法。

我应该知道的 Sosex 有什么变化吗?

我们在 Windows 7 64 位上调试运行在 Windows 7 64 位机器上的 x86 进程的故障转储。

与此同时,我可以尝试使用 !syncblk,但 !dlk 非常好。

0 投票
1 回答
259 浏览

.net - 如何使用 WinDbg 在实例上查找自定义属性

使用 windbg,有没有办法查看在实例上定义的所有自定义属性?(在班级级别)
如果可能的话,我可以在自定义属性中看到字段值吗?

0 投票
2 回答
3527 浏览

clr - 可以让 WinDBG 在符号存储中找到 mscordacwks.dll 吗?

问题

有很多手动方法可以让 WinDBG 在没有符号存储的情况下找到 mscordacwks.dll(将文件放在路径中的某个位置,将其放在与 windbg.exe 相同的文件夹中,将其放在我的 Framework\v 文件夹中,指定路径WinDBG 使用.cordll -lp c:\dacFolder等),但他们都只为修复它。我需要为使用我的符号存储的每个人更普遍地修复它。

我能想象的可能的解决方案是:

  • WinDBG 使用 mscordacwks.dll 的子文件夹名称而不是 mscorwks.dll 的文件夹名称来检查符号存储。
  • SymStore.exe 被添加到 mscorwks.dll 的子文件夹名称下的 mscordacwks.dll,以便 WinDBG 找到它。

问:这些事情中的任何一个都是可能的,还是有其他我没有想到的解决问题的方法?

的背景

在分析 .NET 进程时,我遇到了 psscor2(和 sosex)无法在我的机器上找到合适的 mscordacwks.dll 的(显然很常见的)问题。WinDBG 中的错误是:

有很多关于这个的问题和很多好的答案,实际上所有这些最终都参考了 Doug Stewart 的优秀博客文章,什么是 mscordacwks.dll?.

多亏了这一点,我通过获取正确的 mscordacwks.dll 并将其放置在此处来解决所有问题:

我知道 WinDBG 会出现在哪里,因为我之前用!sym noisy.

所以我现在已经准备好了,但是我必须将它物理地放在那个路径中,而不是通过正常symstore.exe机制将它添加到我的符号服务器中。由于我的符号存储不仅仅是我自己使用的,因此我需要以正确的方式为使用该存储的其他人做这件事。

这就是问题所在。当我添加使用symstore.exe而不是进入上述路径时,它进入:

唯一的区别是子文件夹名称在4E1545CB1bd000这里而不是4E1545829a3000WinDBG 正在寻找的名称。

这样做的原因是,在将二进制文件添加到符号存储时,symstore.exe使用二进制文件的 PE 来获取图像时间戳和图像大小。在这个特定的 .dll 的情况下,dumpbin.exe /headers mscordacwks.dll显示这些是:

  • 图片时间戳:0x4E1545CB(2011 年 7 月 7 日星期四 01:36:11)
  • 图片尺寸:0x1BD000

因此,子文件夹名称4E1545CB1BD000

另一方面,WinDBG 正在寻找的是基于图像时间戳和图像大小的子文件夹mscorwks.dll,而不是mscordacwks.dll,因为前者被加载到进程中,而不是后者。WinDBG 无法知道 DAC 模块的时间戳和大小,因为该模块不在进程转储中。

作为对这一解释的进一步验证,dumpbin.exe /headers mscorwks.dll揭示:

  • 图片时间戳:0x4E154582(2011 年 7 月 7 日星期四 01:34:58)
  • 图片尺寸:0x9A3000

您可以看到添加到子文件夹名称4E1545829A3000

知道了这一点,现在人们就更明白为什么人们经常遇到的所有这些 mscordacwks.dll 版本似乎都从 Microsoft 的符号服务器中丢失了。我确定它们在那里,只是 WinDBG 和 psscor2 找不到它们,因为它们选择了错误的子文件夹名称。为什么它甚至会费心搜索符号路径,这超出了我的理解,因为它保证永远找不到它!

所以这就是我的挑战。我可以symstore.exe使用 mscorwks.dll 的 PE 信息以某种方式强制添加 mscordacwks.dll 吗?如果没有,我是否遗漏了有关 WinDBG 和 psscor2 的信息,是否有办法让他们知道 mscordacwks.dll 的正确时间戳和大小,即使它没有加载(以及让他们实际使用这些而不是 mscorwks.dll 的方法)?

0 投票
1 回答
2318 浏览

debugging - 如何使用 SOS(或 SOSEX)在 WinDbg 的某个字段中显示具有特定值的托管对象?

我的问题是这样的:

我阅读此输出的方式是Microsoft.Internal.ReadLock我的堆上有 74,247 个实例。但是,其中一些可能正在等待收集。

我只想显示那些没有待收集的。

例如,0000000080f88e90是这些对象之一的地址,它是垃圾。我知道,因为:

可以看到,两者sosex.mroot和都sosex.refs表示没有人引用它,加上转储其字段表明它是通过 处置的IDisposable,因此该对象是垃圾是有道理的(我知道被处置并不意味着该对象是垃圾,但它是在这种情况下)。

现在我想显示所有那些不是垃圾的实例。我想我要使用.foreach命令。像这样的东西:

我的问题是我不知道这种.if情况是什么。

我可以像这样检查 _isDisposed 字段:

但是.if需要一个表达式,而我所拥有的只是一个命令输出。如果我知道如何从命令输出中提取信息并将其排列为表达式,那么我可以将其用作.if条件并且做得很好。

所以,我的问题是 - 有没有办法将字段值作为适合的表达式.if?或者,是否可以以适合将结果用作.if条件的方式解析命令输出?

0 投票
1 回答
594 浏览

debugging - 在 WinDbg 中只转储有根的托管对象和/或关于它们的统计信息

我的问题是dumpheap -stat返回了大量的对象,我不知道哪些是有根的,哪些不是。

好吧,如果我在单个地址上运行!mrootor!refs命令,我可以,但是这种方法不能很好地扩展到由dumpheap.

例如,dumpheap -stat包含以下行:

哇,74,247 个实例。然而,运行

揭示了报告的每个实例DumpHeap实际上都是未回收的垃圾!

我如何发现每个实例都是垃圾是另一个问题。我必须将所有NONE字符串提取到一个文件中,并将所有Objects referencing字符串提取到另一个文件中,然后比较每个文件中的行数。当然有更好的方法:-(。

无论如何,我想知道如何只关注有根对象。理想情况下,我想获得这些对象的统计数据和详细信息。

0 投票
1 回答
488 浏览

c# - 有没有办法用 ClrMD 获取局部变量的值(如 sosex !mdv)?

将 windbg 与 SOS 和 SOSEX 一起使用,我可以使用 !mdv 命令“显示托管框架的参数和本地变量”。有没有办法使用ClrMD以编程方式实现相同的结果?

0 投票
1 回答
160 浏览

windbg - 为什么 SOS/SOSEx 会误解 System.Collections.Generic.List.Enumerator 的值?

我写了一个简单的 C# 应用程序:

我在最后放了一个断点,用 Visual Studio 运行它,然后启动 windbg 并附加到进程(打开“非侵入性”复选框)。

然后我输入了这些命令:

我得到的输出显然是错误的(字段都乱了,似乎在'current'下报告'index'的值,'version'下'current'的值,'index'下的version'的值'。它只有一个字段是正确的——第一个。

然后我尝试使用 SOS 的 !DumpVC 代替,得到了同样的困惑:

为什么会这样?

0 投票
1 回答
536 浏览

c# - SOSEX mdt 命令错误输出

我发现sosex !mdt命令有一个很奇怪的问题。

我正在调查崩溃内存转储,并使用!mdt命令检查System.Web.EtwTrace类静态字段的值:

!mdt System.Web.EtwTrace

[s] _traceLevel : int

...

AppDomain '/LM/W3SVC/2/ROOT-1-130489393569613986' (00000000021a2d50): 0x0000000000000000

我决定使用!DumpClass SOS 命令仔细检查该值:

!DumpClass 000007feec7ddbb8

类名:System.Web.EtwTrace

……

共享静态 _traceLevel 6

看起来像 SOSEX 中的一个错误,有人遇到过同样的问题吗?