问题标签 [sos]

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 回答
3955 浏览

c# - 在这个例子中方法表中的字段是什么意思?

我试图了解存储在方法表中的信息。这是我的代码。

这是对象在内存中的样子

然后我转储方法表

这是我发现有点混乱的地方。

  1. 第一个字段指示对象的类型(如果它是类或数组等)。我的理解是,对于类,此字段显示0x00040000,而此处仅显示0x00000000.

  2. 第二个字段是对象的大小。这个还行。

  3. 第三场有什么意义00050011

  4. 这个表示继承方法的数量,它指向父对象类的方法ToString、、Equals和。这个对吗?GetHashCodeFinalize

我不了解其他领域,所以如果有人也解释一下,将不胜感激。

0 投票
1 回答
476 浏览

obfuscation - 混淆程序集的堆栈跟踪

我正在使用 Windbg/SOS 并查看一些托管代码。问题是代码被混淆了。知道如何调试这些吗?

0 投票
2 回答
3524 浏览

windbg - 来自故障转储文件的主机信息

是否可以获得有关创建转储文件的主机的信息,例如操作系统版本、服务包、.NET 框架版本等。

0 投票
2 回答
1609 浏览

.net - 使用 SOS 调试 .net

我使用 clrdump 创建了一个转储。当我使用sos查看它时,我加载了sos然后运行!dso,但我得到的错误是:

但是,在模块窗口中,它说符号已加载。我从 MS 商店获得了最新的符号?

有人有什么想法吗?

谢谢,

达伦。

0 投票
2 回答
205 浏览

windbg - 我对反汇编代码做错了什么

我正在尝试 Naveen 的博客http://naveensrinivasan.com/2010/06/11/piracy-in-net-code-%e2%80%93-part-3-%e2%80%93提供的代码示例-甚至当代码被混淆时/
当他运行!u ($ip)命令时,他得到了很好的反汇编,但是当我尝试运行相同的东西时,我似乎遇到了一些无法反汇编的非托管代码。

知道我可能做错了什么吗?

0 投票
4 回答
76000 浏览

.net-4.0 - 无法在 WinDbg 中加载 SOS

背景:我是 WinDbg 的新手,第一次尝试让它运行。我想检查从 Windows Server 2008 (x86) 上的 IIS 7 中托管的正在运行的 ASP.NET 4 站点获取并下载到本地计算机的内存转储。

我安装了调试工具并第一次启动了 WinDbg,打开了故障转储。我去了文件 | 符号文件路径并设置路径*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*并等待所有符号加载。

在尝试加载 SOS 时,我遇到了问题。首先,我尝试了以下命令...

...并收到回复Unable to find module 'mscorwks'

在网上搜索之后,我尝试通过执行以下命令来加载 mscorwks ......

...并收到响应“'g'中没有可运行的调试错误”

我将 SOS.dll(从 C:\Windows\Microsoft.NET\Framework\v4.0.30319)复制到 WinDbg 目录中,然后尝试...

...并收到错误...

我不太确定如何进行。我只想加载 SOS 并挖掘这个转储文件。任何帮助将不胜感激。

仅供参考...我正在尝试使用 64 位版本的 Windbg 在 64 位版本的 Windows 7 上打开转储文件。

0 投票
1 回答
853 浏览

windbg - 虚拟与物理内存泄漏

从调试 .net 应用程序的角度来看,我很难理解虚拟内存与物理内存泄漏之间的区别。

任何人都可以通过示例详细说明这个概念,我们怎么能只有一种类型的泄漏而没有其他类型的泄漏。

TIA

0 投票
2 回答
3387 浏览

.net-4.0 - windbg - 模块未加载“图像列表中未找到 dll”

我正在尝试使用 windbg 在我的 VS2010 .net4 应用程序中为未处理的异常获取正确的调用堆栈。主程序是一个控制台应用程序。这个 dll 正确加载了它的符号。在同一目录中,我有一个不会加载的 dll+匹配的 pdb。

我在 Windows Server 2008 R2、64 位(未安装 VS)上运行该应用程序。但是该应用程序是在 32 位上编译的。我正在使用 winX86 调试器附加到进程。

我已经从 http://www.stevestechspot.com/(32位版本)下载了支持 .net 4 的 sosex,sos.dll(来自“C:\Program Files (x86)\Debugging Tools for Windows (x86)\ clr10\sos.dll") 版本为 6.12.2.633。

发出以下命令:
sympath+ "...folder of exe and dll"
.loadby sos clr
.load sosex.dll

运行时 !mk 我得到以下信息:

运行 !clrstack 时,我得到以下信息:

如您所见,在这两种情况下,除了 xxx.Services.StickyNotes.dll 行之外,我都在堆栈中获得了文件名 + 行号。

我试过: .realod /f ""c:...\xxx.Services.StickyNotes.dll" - 相同的错误和
ld "c:...\xxx.Services.StickyNotes.dll"导致

没有模块匹配 'c:...\Bin\xxx.Services.StickyNotes.dll'

使用 !sym quiet 没有帮助,我认为它甚至没有尝试加载 pdb,因为模块本身没有加载。

我不知道为什么这个特定的 dll 不会加载。SN_Console.exe 和 SNB_Bridge.dll 从同一目录加载没有问题。(我不关心异常本身,我植入了创建的代码。问题是关于建立一个好的调试环境)。

提前致谢,添马舰

0 投票
1 回答
145 浏览

windbg - 以下阻止我使用sos,帮助

加载数据访问 DLL 失败,0x80004005 验证 1) 您有最新版本的调试器(6.2.14 或更高版本)2) 与您的 mscorwks.dll 版本匹配的文件 mscordacwks.dll 在版本目录中 3) 或,如果您正在调试转储文件,请验证文件 mscordacwks_.dll 在您的符号路径上。4)您正在与转储文件相同的架构上进行调试。例如,必须在 IA64 机器上调试 IA64 转储文件。

0 投票
2 回答
3325 浏览

.net - 当涉及(WPF)本机图像时,如何获得混合模式小型转储的完整堆栈跟踪?

我有一个使用 WPF 的混合模式 C++/CLI 应用程序。我们客户的崩溃作为小型转储报告给我们自己的服务器。

当我尝试使用来自 windbg sos-extension 的 !pe 或 !clrstack 命令调查小型转储时,我经常会从 WPF 程序集中获得不完整的堆栈帧信息,例如

在这种情况下,堆栈跟踪解码也会变得非常慢。

使用 !sym noise 显示了很多来自以下内容的消息

我用了

c:\Windows\System32;SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

作为windbg符号和图像路径。

据我了解,如果发生崩溃的机器和带有调试器的机器在 Windows 版本、.NET 版本的 SP 方面不同,只会发生在 .NET 本机映像上。我主要看到它用于 WPF 本机图像。

我能做些什么来避免这个问题?

更新我最初的问题:

我忘了提到我在使用不同的 mscordacwks dll 版本时遇到了类似的问题。为了使用 SOS,在调试计算机上需要崩溃计算机上使用的 mscordacwks.dll 版本。所以我开始从不同的Windows和SP组合中收集这个dll的各种版本,并将它们放在我们自己的符号服务器上。当然,这很尴尬,甚至更是如此,因为它们需要按照特殊约定命名(例如 mscordacwks_x86_x86_2.0.50727.4952.dll)。

如果我从下面正确理解 Rick 的回答,我必须对我们引用的 .NET 程序集的本机映像做类似的事情。我已经通过一个示例(WindowsBase.ni.dll)手动尝试了这一点,但我无法轻松地将这个 dll 存储在我们的符号服务器上。symstore 似乎不理解本机图像。来自 symstore 的错误消息是:

所以我尝试将它放入一个额外的目录并将其添加到我的符号或图像路径中,然后 SOS 正确解码了 WindowsBase_ni 帧。

但是这一切看起来像是很多烦人的手动设置工作:获取各种 .NET 版本的所有本机映像(SP 和安全更新呢),手动设置调试器,因为无法使用 symstore,...

这真的是唯一的方法吗?

如果您可以控制客户的环境,这可能不是这样的问题。但对于为大型用户群构建混合模式应用程序的组织来说,这似乎是一场事后调试的噩梦。