问题标签 [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.
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 位中运行。
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:
sxe ld:mscorlib
sxe ld:clrjit
load
Path to sosex.dll!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?
windbg - 为什么 sosex!dlk 在 Windows 7 上永远运行?
我们最近从 Windows XP 迁移到了 Windows 7,自从迁移后,我发现我无法再在 WinDbg 中运行来自 Sosex 的 !dlk 命令,它只是永远运行。它曾经是一种在我们的代码中捕获死锁的便捷方法。
我应该知道的 Sosex 有什么变化吗?
我们在 Windows 7 64 位上调试运行在 Windows 7 64 位机器上的 x86 进程的故障转储。
与此同时,我可以尝试使用 !syncblk,但 !dlk 非常好。
.net - 如何使用 WinDbg 在实例上查找自定义属性
使用 windbg,有没有办法查看在实例上定义的所有自定义属性?(在班级级别)
如果可能的话,我可以在自定义属性中看到字段值吗?
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
这里而不是4E1545829a3000
WinDBG 正在寻找的名称。
这样做的原因是,在将二进制文件添加到符号存储时,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 的方法)?
debugging - 如何使用 SOS(或 SOSEX)在 WinDbg 的某个字段中显示具有特定值的托管对象?
我的问题是这样的:
我阅读此输出的方式是Microsoft.Internal.ReadLock
我的堆上有 74,247 个实例。但是,其中一些可能正在等待收集。
我只想显示那些没有待收集的。
例如,0000000080f88e90
是这些对象之一的地址,它是垃圾。我知道,因为:
可以看到,两者sosex.mroot
和都sosex.refs
表示没有人引用它,加上转储其字段表明它是通过 处置的IDisposable
,因此该对象是垃圾是有道理的(我知道被处置并不意味着该对象是垃圾,但它是在这种情况下)。
现在我想显示所有那些不是垃圾的实例。我想我要使用.foreach
命令。像这样的东西:
我的问题是我不知道这种.if
情况是什么。
我可以像这样检查 _isDisposed 字段:
但是.if
需要一个表达式,而我所拥有的只是一个命令输出。如果我知道如何从命令输出中提取信息并将其排列为表达式,那么我可以将其用作.if
条件并且做得很好。
所以,我的问题是 - 有没有办法将字段值作为适合的表达式.if
?或者,是否可以以适合将结果用作.if
条件的方式解析命令输出?
debugging - 在 WinDbg 中只转储有根的托管对象和/或关于它们的统计信息
我的问题是dumpheap -stat
返回了大量的对象,我不知道哪些是有根的,哪些不是。
好吧,如果我在单个地址上运行!mroot
or!refs
命令,我可以,但是这种方法不能很好地扩展到由dumpheap
.
例如,dumpheap -stat
包含以下行:
哇,74,247 个实例。然而,运行
揭示了报告的每个实例DumpHeap
实际上都是未回收的垃圾!
我如何发现每个实例都是垃圾是另一个问题。我必须将所有NONE
字符串提取到一个文件中,并将所有Objects referencing
字符串提取到另一个文件中,然后比较每个文件中的行数。当然有更好的方法:-(。
无论如何,我想知道如何只关注有根对象。理想情况下,我想获得这些对象的统计数据和详细信息。
c# - 有没有办法用 ClrMD 获取局部变量的值(如 sosex !mdv)?
将 windbg 与 SOS 和 SOSEX 一起使用,我可以使用 !mdv 命令“显示托管框架的参数和本地变量”。有没有办法使用ClrMD以编程方式实现相同的结果?
windbg - 为什么 SOS/SOSEx 会误解 System.Collections.Generic.List.Enumerator 的值?
我写了一个简单的 C# 应用程序:
我在最后放了一个断点,用 Visual Studio 运行它,然后启动 windbg 并附加到进程(打开“非侵入性”复选框)。
然后我输入了这些命令:
我得到的输出显然是错误的(字段都乱了,似乎在'current'下报告'index'的值,'version'下'current'的值,'index'下的version'的值'。它只有一个字段是正确的——第一个。
然后我尝试使用 SOS 的 !DumpVC 代替,得到了同样的困惑:
为什么会这样?
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 中的一个错误,有人遇到过同样的问题吗?