问题标签 [debugdiag]

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 投票
1 回答
471 浏览

asp.net - 调试 .Net/IIS 崩溃,它不会在附加调试器时崩溃

我有一个 .Net Web 应用程序在生产中开始崩溃,我不知道为什么。它非常频繁地崩溃(在高负载下大约每 5 分钟一次)并导致应用程序池崩溃。在事件日志中,我只有以下内容:

错误应用程序名称:w3wp.exe,版本:7.5.7601.17514,时间戳:0x4ce7afa2 错误模块名称:未知,版本:0.0.0.0,时间戳:0x00000000 异常代码:0x00000000 错误偏移量:0x000007fe97df95dc

的异常代码0x00000000并不是特别有用。

通常从这里我会尝试获取故障转储并查看。但是,无论何时DebugDiag运行,应用程序都不会崩溃。这使得追踪变得更加困难。运行 DebugDiag 时内存使用量急剧上升(每 6 小时 2gb?),但我认为这是正常的。

不太确定从这里去哪里。

0 投票
0 回答
165 浏览

c++ - DebugDiagv2 显示导致最大泄漏的 UNKNOWN_MODULE

最大的内存消耗函数是 DomainBoundILStubClass.IL_STUB_PInvoke(UInt32)。该模块的基地址是 0x00000000,所以这可能就是它是“UNKNOWN_MODULE”模块的原因。以下是功能详情:

功能详情

在堆栈跟踪的顶部或顶部附近,此函数的堆栈为零,所以我不知道是什么在调用它。

我假设这是聚合所有对 malloc 的 pinvoke 调用。那是对的吗?由于“分配类型”是 C/C++,这是否还包括对 operator new 的 pinvoke 调用?

0 投票
0 回答
322 浏览

asp.net - DebugDiag 显示许多 HttpContext 未完成?

我在 w3wp 工作进程上进行了进程转储,并且在 HttpContext 报告中看到太多 HttpContext 对象

XXXXX 实际上只是在目录中获取一个 ASP(经典)页面以进行健康检查,但在 IIS 运行后的 15 小时内,它已经累积了超过 3k 的这些页面。如何清除这些 HttpContext 对象?

同样对于托管在服务器 YYYYY 上的 REST 服务,由于某种原因,超时设置为 2147483647 秒(68 年?!?!)。我在 web.config 文件中没有看到任何设置来指定这一点。有任何想法吗?

0 投票
1 回答
1196 浏览

windbg - Windows 故障转储分析

我正在使用 DebugDiag 分析 Windows 上的故障转储。

这是报告摘要说明:

在 XXXX.dmp 中,来自 Microsoft Corporation 的 C:\Windows\System32\msvcr120.dll 中 msvcr120!abort+4a 的汇编指令在线程 26 上导致了未知异常 (0x40000015)

调用堆栈是:

伙计们,我能对这个崩溃转储做什么?

干杯,

多伦

0 投票
0 回答
1336 浏览

c# - 使用 DebugDiag 和 WinDbg 调查 .Net 应用程序中的内存泄漏

我正在尝试诊断 C# 客户端应用程序中的内存泄漏。这个应用程序:

  • 在强化的 Windows 环境中运行
  • 与本地非托管第三方 API 通信
  • 通过 tcp 与服务器应用程序通信
  • 通过 waveOutWrite() 播放 wav 文件
  • 通过键盘供应商 dll 与自定义 USB 键盘集成
  • 接受用户输入以针对第三方 API 执行操作

根据客户配置,正常使用下的应用程序使用 50 到 100 MB 的内存。我们对该应用程序的最新更新运行了几周没有问题(确认在此期间没有内存问题)。然后,在没有任何代码更改或客户知道的客户端机器的任何更改的情况下,我们开始遇到以下情况:

  • 不受控制的、快速和/或逐渐的内存增长,直到抛出内存不足异常
  • 自定义键盘的间歇性延迟/不稳定响应
  • 当我们尝试播放音频时,waveOutWrite() 返回错误值 1(发生在内存接近最大使用量之前)

我使用 DebugDiag 1.2 来监视泄漏并得到完整的转储。分析的初步警告是:

DebugDiag 内存警告

转储显示本机堆中有 1.19 GB 的分配。634MB 来自Microsoft VC 运行时堆(私有),549MB 来自 DebugDiag LeakTrack 堆。634MB 堆有 44 个段,其中大部分为 15.81MB。

但是,分配报告似乎并不对应。按大小划分的最高分配是 992KB,也是数量为 3 的最高分配。以下是 634MB 堆的最高分配:

本机堆顶分配

我读错了吗?

转移到 WinDbg,如果我运行!heap -stat -h [634MBheapaddress] -grp B,我会得到:

如果我没看错的话,它会将顶部分配显示为 68 个字节并且有 650k 分配。这个对吗?如果是这样,这可能是一个潜在的问题,但仅代表 44MB - 远不及我显示为保留的 650MB。

无论哪种方式,我现在都不确定如何弄清楚这些分配是什么或者是什么造成了它们。我不知道为什么在我们这边没有任何代码更改的情况下这些问题就会开始发生。我不得不假设客户系统上发生了一些他们不知道的变化,这导致了我们代码中的一个错误,但到目前为止,我还没有找到根本原因。

任何帮助将不胜感激!

0 投票
0 回答
201 浏览

windbg - 使用 WinDbg 运行转储文件后无法获取正确的堆栈跟踪

我们抛出Production了导致w3wp process崩溃的异常。为了找出错误代码,我们配置了在发生Debug Diag时创建转储文件的代码exception。然后我们尝试运行转储文件WinDbg以获取Stack Trace错误代码,但这就是我们在打开转储文件并运行所需的commands.

在此处输入图像描述

正如您在上图中看到的那样,stack trace运行后它没有给出commands,我不确定我错过了什么

更新

在按照 中的建议运行command两次后comments,我能够获得stack trace. 但似乎没有指出错误代码,stack而是frameworkstack. 下面是snapshot开始的stack。不确定如何识别错误。有什么建议或者我可能需要为此单独打开Question

在此处输入图像描述

0 投票
1 回答
2071 浏览

.net - 如何分析高 CPU 和排队的 DebugDiag 分析?

我看到我的 .NET API(使用 Nancy/OWIN)上的 CPU 和 http 队列增加了。

它在 Azure 上运行,所以我进行了内存转储。

我试图弄清楚如何阅读 DebugDiag 分析报告。

这是警告部分: 在此处输入图像描述

我假设“62 个客户端连接”是排队的原因,所以我深入研究了该部分。

对一个 URL 有一些常见的请求,如下所示:

Host Header MyApi:80 GET request for /companies/list HTTP Version HTTP/1.1 SSL Request True Time alive 1 day(s) 03:43:21 QueryString
Request mapped to
HTTP Request State HTR_READING_CLIENT_REQUEST Native Request State NREQ_STATE_PROCESS Client Connection State CCS_STARTUP

但我真的不知道那是什么意思。那是说请求仍然开放,到目前为止需要 1 天吗?它们还出现在“运行时间”部分。

代码正在运行异步/等待,所以我想知道我是否没有正确处理取消等?

谁能给我一些关于如何分析内存转储以诊断高 CPU/队列的建议?

谢谢

0 投票
0 回答
279 浏览

iis - 了解 DebugDiag 工具

我一直在试图了解我拥有的 Windows 服务器中的进程内存使用率高的原因是什么。我安装了该工具 DebugDiag 1.2 来尝试找出问题所在。

这是在我的服务器上运行的内容:我有一个 IIS 服务器,它有相当数量的池应用程序(68 个池应用程序)。对于每个池应用程序,至少有 4 个应用程序。最近,我遇到了与高内存使用相关的问题,导致服务器以 97% 或更高的内存使用率工作。

当我在下面拍摄这个打印屏幕时,它工作正常。但是,内存使用量很容易变高。

任务管理器: 在此处输入图像描述

话虽如此,我一直在尝试了解如何使用微软的工具“DebugDiag1.2”来查找可能帮助我找到导致问题的原因的东西(源代码的一部分,一个 sql 过程)。

我读到我们不能限制每个 IIS 池应用程序的内存,所以我想解决方案是尝试优化应用程序。但首先我需要知道从哪里开始。

我希望有人可以帮助我。

0 投票
0 回答
200 浏览

.net - 在 DebugDiag 2.0 自定义规则中转储程序集属性

我正在尝试在DebugDiag 2.0中创建自定义转储分析规则。我们的代码是一个包含许多程序集的托管 C# 应用程序。每个程序集都有自己的自定义属性,其中包含有关为创建程序集而编译的源文件的修订信息。

我知道可以通过WinDbg命令!savemodule或 !saveallmodules 将模块提取到文件中。然后我可以使用像 JetBrains DotPeek 这样的工具来检查程序集属性。

我想在 DebugDiag 分析期间找到这些属性,并将属性信息转储到 DebugDiag 报告中。在自动分析报告中包含这些属性将帮助我的团队提高效率。

如何使用 DebugDiag 2.0 对象从内存转储中提取托管程序集属性?

我尝试从NetDbgObj调试器对象中获取模块,但我没有看到从那里获取属性的便捷方法:

我可以看到 ClrModule 对象可通过 NetDbgObj.ClrRuntime 对象获得。我可以得到一个 ClrModule 对象,但我不知道该怎么做。、 和有属性MetadataAddress,但我不知道如何处理这些。MetadataLengthMetadataImport

这些属性对象不在托管堆上,因此!dumpheap -type MyAttribute不会返回它们。

程序集属性作为元数据存储在程序集数据的某处。我已经看到了!DumpModule 的输出:

我知道我可以使用 dc 之类的命令转储元数据:

我不知道从这里去哪里。

0 投票
1 回答
476 浏览

debugdiag - Debug Diag 生成大内存转储文件

我配置Debug DiagProductionCrash rule为特定app pool的 action type设置的位置Long Stack Trace700mb但问题是它生成的转储文件大约每个都非常大。我不确定为什么这些文件太大。有办法truncate吗?