问题标签 [clrmd]

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

c# - ClrMd 创建运行时抛出异常

我正在使用 CLR 内存诊断库来获取正在运行的进程中所有线程的堆栈跟踪:

我从这里得到了这段代码,它似乎对其他人有用,但它在指示的行上为我抛出了一个异常,并带有消息This runtime is not initialized and contains no data.

dacLocation设置为C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscordacwks.dll

0 投票
1 回答
269 浏览

c# - ClrMD 在另一个用户的进程上

我有一个报告挂起在事件日志中的 .Net 应用程序。事件说“应用程序挂起”,没有可用的详细信息。

因此,我创建了一个使用 ClrMD 库的 C# 控制台应用程序。但需要注意的是,这个应用程序是作为 RemoteApp 发布的。当我尝试将 ClrMD 附加到用户的进程时,我收到此错误:Microsoft.Diagnostics.Runtime.ClrDiagnosticsException:无法附加到进程。错误 0。

这并不奇怪,因为我以管理员身份登录服务器,并且他们与不同的用户处于自己的 RDP 会话中。

因此,我决定冒充他们登录的用户,认为如果我以他们的身份运行我的 ClrMD 应用程序,它将有权访问该进程。这给了我一个不同的错误:Microsoft.Diagnostics.Runtime.ClrDiagnosticsException:无法附加到进程。错误 1008。

我似乎找不到任何关于 1008 意味着知道从这里去哪里的线索。我意识到我可能正在尝试做一些不可能的事情。

  1. 有没有人让 ClrMD 附加到另一个用户的进程?
  2. 如果没有,是否有可以附加到其他用户进程的调试工具?
  3. 如果没有,人们是否在生产中使用过 ClrMD,我如何知道应用程序已挂起以知道何时触发 ClrMD 转储?只是在另一个后台线程中监视 UI 线程?
0 投票
2 回答
674 浏览

windbg - 如何使用 WinDBG/SOS 和 ClrMD 检查 WeakReference 值?

我正在调查生产中的内存泄漏问题并检索了内存转储。我正在尝试转储我遇到的累积对象的值WeakReference。这是我在 WinDBG 中得到的:

我们可以发现我们不能使用该m_handle值作为对象地址。我检查了代码,WeakReference它是完整的extern代码。

我的问题是,我们如何使用 WinDBG/SOS 检查它的价值?另外,我正在为 ClrMD 的问题编写临时分析器,那么我应该如何检查对象的对象引用WeakReference呢?

0 投票
1 回答
380 浏览

c# - ClrMd - ClrInfo TryGetDacLocation 和其他方法丢失?

我正在试用 ClrMd 库: https ://github.com/Microsoft/clrmd

我有这个问题,根据第一个教程,我有一个名为TryGetDacLocation的 ClrInfo 类型的方法,但是我可以在其中找到它......我可以看到 Dac 位置是在 Clrinfo 内自动生成的,但我正在尝试调用 runtimeInfo.CreateRuntime(); 我得到:“这个过程和 dac 之间的架构不匹配”

转储和正在运行的进程是相同的 - 32 位架构。我没有看到该功能和其他功能,例如 -类中的TryDownloadDac

https://github.com/Microsoft/clrmd/blob/4fa26f39c8c057abf0e2a67d735369ce4766fa07/src/Microsoft.Diagnostics.Runtime/ClrRuntime.cs

有任何想法吗?

0 投票
1 回答
253 浏览

windbg - ClrMD 中的 ip2md 等价物是什么

我知道如何迭代内存中的对象,但我将使用ClrMDas 中的!ip2md命令做一些事情WinDBG/SOS。我究竟应该怎么做?

0 投票
3 回答
11994 浏览

c# - 从 C# 调用 WaitForSingleObject

我正在尝试从 C# 调用 WaitForSingleObject 方法,如此处所述:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

为了调用这个函数我需要创建一个Handle,或者我需要得到一个IntPtr类型的Handle,怎么做呢?

我已经尝试过我发现的这个功能: http ://www.pinvoke.net/default.aspx/kernel32.WaitForSingleObject

或者例如,当我从控制台获取句柄时:

它抛出一个 DllNotFoundException。

这里有什么问题?

我需要它来运行这个函数调用的进程,并从它的进程中获取一个转储,以便我的 ClrMd 库学习。

任何帮助将不胜感激。

代码示例:

0 投票
1 回答
423 浏览

.net - 与 !DumpHeap -live 等效的 ClrMD 是什么?

ClrMD是检查实时可执行文件或内存转储的好工具。要将所有托管堆对象转储为摘要,您可以使用

https://blogs.msdn.microsoft.com/dotnet/2013/05/01/net-crash-dump-and-live-process-inspection/

这很好用,相当于带有SOS扩展的Windbg中的!DumpHeap -stat 。对于回归测试,通常希望在测试后检查对象是否泄漏。这看起来非常适合上面的代码,但不幸的是它会产生误报,因为可能有些对象不再是 root,但它们仍会在摘要中报告。尽管没有泄漏,但这可能会导致报告的泄漏。

SOS已通过将-live 开关添加到!DumpHeap缓解此问题。仅获取活动对象的等效ClrMD代码是什么,因此回归测试仅因真实原因而失败?

我想我需要使用ClrType.EnumerateRefsOfObjectCarefully递归地遍历堆栈,直到找到根对象(ClrHeap.EnumerateRoots),但这种方法需要许多临时哈希集来跟踪递归对象图。这是唯一的方法,还是在 MS 内部某个地方已经有一个正确且性能良好的示例可用(PerfView源?)。

0 投票
1 回答
652 浏览

c# - CLRMD 架构不匹配

我正在研究 CLRMD 库并尝试加载转储。我在这个过程和 dac 之间得到了不匹配的架构。控制台应用程序,它是创建字符串数组的 x86 应用程序。

我使用 32Bit TaskManager 创建转储,当我加载转储时,我收到架构不匹配错误。

在此处输入图像描述

dataTarget.Architecture 是 Amd64 和 PointerSize 8。

在此处输入图像描述

但是当附加相同的应用程序进程时,dataTarget.Architecture 为 x86,Pointersize 为 4。

在此处输入图像描述

不知道什么时候有这个区别。我在转储时是否遗漏了一些东西。请让我知道如何将转储加载到 CLRMD

提前致谢。

0 投票
1 回答
626 浏览

c# - How do I get information about the methods in StackTrace using Microsoft.Diagnostics.Runtime?

Code:

As a result, I get instead of method names - "UNKNOWN". But the in method is the field "InstructionPointer", maybe it will give more information?

0 投票
1 回答
284 浏览

c# - 我可以使用 ClrMD 仅遍历前台进程使用的对象吗?

目前,我可以使用以下代码使用 ClrMD 获取堆中存在的所有对象。是否可以仅获取目标进程中使用的对象集(即仅在目标进程的源代码中的对象)。