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

.net - 任何用于调试的 SoSAssist 等效免费工具

我过去使用过 SosAssistin,它很棒,现在我尝试再次下载它,但它不再可用:(任何其他可以直观地显示内存/线程/调用堆栈的工具?

0 投票
3 回答
6479 浏览

.net - SOS(罢工之子)调试器扩展名称背后的故事是什么?

“罢工之子”这个名字有什么意义?它有任何意义还是听起来很酷?

0 投票
5 回答
7072 浏览

windbg - 使用 WinDbg 从委托中获取方法名称

我有以下委托对象转储:

如何获取委托所指向的方法的名称?

0 投票
1 回答
1100 浏览

.net - 带有 SOS 的 Windbg,在正确的异常处停止

我有一个 Windows 服务,它间歇性地抛出一个异常,有时会杀死它的 SQLConnection,有时会完全杀死该服务。它在客户的网站上实时运行。

我计划在其上使用 Windbg + SOS 来获取故障转储,以便我可以在闲暇时进行调试。

然而,在我第一次尝试时,调试器在遇到第一次机会异常时停止了服务,该异常在代码中被捕获和处理(就像我使用sxe clr命令一样)。

帮助文件似乎建议我使用sxd clr,而不是sxe clr,来捕获第二次更改异常而不是第一次机会异常。

然而,在我的测试中,生成、捕获和处理的异常被sxd clr命令与抛出的异常(但未捕获)完全相同,即它被记录和忽略。

这种行为是不是在抛出异常时停止,可能是因为我在代码中明确抛出了异常,还是所有 clr 异常都无法使用sxd命令停止调试器?我应该使用不同的命令吗?

其次,由于 Windbg 没有专门识别 clr 错误,是否可以告诉它仅在特定的未处理异常(即 InvalidOperationException)上停止

0 投票
1 回答
2499 浏览

c# - Windbg 与 SOS,如何转储 ac# struct

如何使用windbg 转储结构,是否有类似于dumpobject 的dumpstruct 命令?或者 dumpobject 也可以转储结构?

0 投票
1 回答
499 浏览

wpf - 使用 sos.dll 问题调试 wpf

我正在使用 sos.dll 来查找 wpf 中的内存泄漏。我发现一个 wpf 对象没有被释放,然后我试图通过使用!gcroot来找出为什么它没有被释放

它给了我一个温暖:

请注意,6c369950 不是有效对象。

调试信息片段

0 投票
2 回答
1628 浏览

windbg - 通过 WinDbg 的值类型与引用类型

我是 Windbg 的新手,并试图了解一些关于价值和引用类型 .NET 的事情。这是我正在使用的代码

我把 sleep 放在这里的唯一原因是让我有时间将 Windbg 与正在运行的进程连接起来。我知道一个更好的方法可能是设置一个断点,但无论如何这是我的问题。

  1. 当 Windbg 附加到进程时,它会进入此线程 #3,但我可以看到没有托管 thead ID 为 3 的线程。该线程仅由调试器使用吗?是否有任何其他线程可能无法通过 !threads 命令显示?如果是这样,是否有任何命令可以给我所有线程?

0:003> !threads -special
ThreadCount: 2
UnstartedThread: 0
BackgroundThread: 1
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive Lock ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception

0 1 BBC 000000000000190C50 200A
00000000000000/8020 0 MTA(终结器)启用00000000027F3CA8:00000000000000000000/20>>>>>>>>>>>>>>>>>>

OSID 特殊线程类型
1 e98 DbgHelper
2 106c 终结 器

0:003> !CLRStack
OS 线程 ID:0xe6c (3)
无法遍历托管堆栈。当前线程可能不是
托管线程。您可以运行的线程来获得在管理线程的列表!
进程
0:003> KB
RetAddr:参数以子:呼叫站点
00000000 77978778 : 0000000000000000 00000000 00000000 0000000000000000 00000000 776d466d:00000000 00000000 00000000 00000000:NTDLL DbgUiRemoteBreakin + 0x38 00000000 00000000 00000000 00000000 00000000 00000000:00000000 00000000 00000000 00000000:ntdll!RtlUserThreadStart+0x1d 00000000 : ntdll!DbgBreakPoint
00000000
00000000 0000000000000000 00000000
778d8791 : 0000000000000000 0000000000000000 : KERNEL32!BaseThreadInitThunk+0xd
00000000
00000000 0000000000000000 00000000

  1. 线程 0 看起来像是运行我的 Main 方法的线程。当我得到堆栈对象的转储时,它没有显示 MyStruct 并且由于某种原因显示 MyClass 两次。任何想法为什么?

0:000> !CLRStack
OS 线程 ID: 0xbbc (0)
Child-SP RetAddr 调用站点
000000000031edb0 000007fef6b32012 ConsoleApplication2.Program.Main(System.String[])
0:000> !DumpStackObjects
OS 线程 ID: 0xbbc (0)
RSP/ REG对象名称
000000000031edd8 00000000027f3c90 ConsoleApplication2.Program + MyClass
的000000000031ede8 00000000027f3c90 ConsoleApplication2.Program + MyClass
的000000000031ee00 00000000027f3c70 System.Object的[](System.String [])
000000000031ef88 00000000027f3c70 System.Object的[](System.String [])
000000000031f170 00000000027f3c70 System.Object的[] (System.String[])
000000000031f198 00000000027f3c70 System.Object[] (System.String[])

TIA

0 投票
1 回答
1790 浏览

windbg - !ClrStack 局部变量 - 是值类型还是引用类型

如何确定局部变量是值类型还是引用类型?

0:000> CLRStack -a
OS线程ID:0xf74(0)
儿童-SP RetAddr呼叫网站
000000000023e9c0 000007fef6b32012 ConsoleApplication2.Program.Main(System.String [])
参数: ARGS
= 0x00000000028f3c70
LOCALS:
0x000000000023e9e0 = 0x0000000000000000
0x000000000023e9e8 = 0x00000000028f3c90
0x000000000023e9f0 = 0x00000000000493e0

0 投票
1 回答
2514 浏览

c# - !DumpStackObjects 显示重复实例?

我有一个小测试程序。当我查看主线程的堆栈对象时,它MyClass在那里显示了两次。MyClass任何想法为什么堆栈上 有两个对象?

0 投票
4 回答
3048 浏览

.net - 了解 32 位与 64 位之间的 CLR 对象大小

我试图了解 32 位和 64 位处理器之间的对象大小差异。假设我有一个简单的课程

所以在 32 位机器上,一个整数是 4 个字节。如果我将 Syncblock 添加到其中(另外 4 个字节),则对象大小将为 12 个字节。为什么显示 16 个字节?

在 64 位机器上,整数仍然是 4 字节,唯一改变的是 Syncblock 将是 8 字节(因为指针在 64 位机器上是 8 字节)。这意味着对象大小将为 16 个字节。为什么显示24字节?