问题标签 [adplus]

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

asp.net - 使用 WinDbg 和 ADPlus 帮助捕获 StackOverflowException

简洁版本

我想要一个 ADPlus 脚本,它会在第一次出现 StackOverflowException 时执行完整的内存转储,然后再清理任何内容,并忽略所有其他异常类型。

日志版本

在发布新的 ASP.NET 代码后,我们开始出现间歇性 StackOverflowExceptions。我们已经在自上次已知良好安装后添加的修订版中寻找无限递归和所有常见的嫌疑人,但找不到任何东西。该网站将运行长达一个小时,然后崩溃。

我们使用了 WinDbg 和 SOS 并尝试使用 ADPlus 获取崩溃日志,使用以下命令:

-NoDumpOnFirst 的原因是我们只能在繁忙的服务器上在生产中重现此错误。为了对每个第一次机会异常(嘿,它发生)进行小型转储,调试器必须暂停 IIS 工作进程足够长的时间以写出 16 meg 文件,因此请求排队并且应用程序变得不稳定。因为错误可能需要长达一个小时才能抬起它丑陋的脑袋,所以这是有问题的。

因此,使用 -NoDumpOnFirst,我得到了一个转储文件,WinDbg 输出这些线程用于:

尝试打印异常表明没有堆栈跟踪,并且其他方法抱怨它是非托管代码。我的猜测是,由于转储是在进程死亡时创建的,因此所有线程都已被垃圾收集,并且没有信息可以获取。

我真的很想让调试器在 StackOverflowException 的第一次机会上执行完全转储并忽略所有其他异常类型。我知道 ADPlus 可以使用配置文件 - http://msdn.microsoft.com/en-us/library/cc409304.aspx - 但格式对我来说都是希腊语。谁能告诉我如何制作一个可以做到这一点的 ADPlus 脚本?

...当然,如果您查看上面的线程列表并且您确切地知道出了什么问题,或者如果我给您更多信息就可以弄清楚,您也可以告诉我。

解决尝试 1

谢谢 deemok 的回答,虽然不太正确,但这将我推向了正确的方向。Stack Overflow 的异常代码不正确(它是 sbo 不是 sov),(或者我当时认为,请参阅下面的 deemok 编辑)所以我尝试使用以下配置进行调试:

并使用以下命令:

我验证了输出的日志文件指示了正确的配置。诀窍是 adplus 的命令行参数按顺序执行,因此如果您从捕获第一次机会异常的配置开始,然后应用 -NoDumpOnFirst,则配置设置将被覆盖。如果最后使用 -c 应用配置,则其设置将胜出。

然而,最后,堆栈溢出被证明是无法捕获的。发生堆栈溢出,无法接收内存转储,然后在第二次机会进程结束事件上发生转储,再次所有内容都被垃圾收集,我无法获得任何有用的信息。

我试图短路进程结束异常,以防它参与并覆盖堆栈溢出,但随后发生了异常,我只是没有内存转储。

幸运的是,我通过检查代码偶然发现了答案。当然,这是一个循环方法调用的例子。

实际分辨率

这个问题早就解决了,但我很快就制作了一个会导致堆栈溢出的 ASP.NET 页面。(毕竟这并不难)并在下面尝试了 Axl 的回应。

XML 有点偏离 - Axl 只是忘记关闭</ADPlus>标签(或者可能在复制粘贴中丢失了它),但这很容易修复,adplus 很友好地告诉我到底出了什么问题。

我将该脚本设置为针对我的测试堆栈溢出引发程序,将结果加载到 windbg 中,当我调用 !clrstack 时,我得到了一个非常清晰(而且很长)的循环调用彼此的方法列表。这一下子就发现问题了!下次堆栈溢出来敲我的门时,我会保留此页面的书签。

0 投票
1 回答
314 浏览

vista64 - adplus/cdb 故障转储在 Vista 64 Ultimate 上是否仍然有效?

我正在对 asp.net 错误进行一些研究。我试图让 adplus 给我一个 IIS 崩溃的崩溃转储文件。我过去在 XP 机器上做过这个,但是在我当前的 Vista Ultimate 设置中 - adplus 脚本不会在 CDB 运行时生成第二个窗口。我正在使用管理员权限运行 adplus cmd 窗口。

使用 Tess 的设置说明,一切正常。但是CDB从来没有产生过......

有没有人设法在 Vista 64 Ultimate 中为 IIS 7 设置 adplus/cdb 故障转储?如果是这样,你能解释一下你是怎么做到的吗?

0 投票
3 回答
1505 浏览

debugging - StackOverflow 和进程关闭后的 Windbg 线程 ID

使用 ADPlus(在故障转储模式下)生成 .dmp 文件。未处理异常的最终序列(产生完整的内存转储文件)是......

第一次机会 DLL 卸载:包含线程 ID,但不包含 StackOverflowException(我不希望它出现,因为此时尚未引发异常)。

第一次机会 Stackoverflow:包含线程 ID,但不包含 StackOverflowException。

第一次机会进程关闭(关闭):包含 StackOverflowException 但不包含线程 ID。

???

有没有办法通过配置 ADPlus 或通过在 Windbg 中运行命令来捕获异常并访问线程 ID?

作为对 Magnus 的回应,如果线程 ID 不可用,是否有一些有用的信息?运行 !threads 返回一些信息,但没有线程 ID 和异常,似乎没有其他地方可以从那里去。在这种情况下,运行 !clrstack 似乎比运行 !threads 更有用。

0 投票
2 回答
208 浏览

debugging - 我怎样才能抓住一个神秘的进程杀手?

我们让这位客户抱怨说,产品在正常运行 2-5 分钟后不断崩溃。花了几天的时间猜测,但我们得出以下结论:
当进程终止而不留下任何痕迹(事件日志/崩溃转储)时,有两种选择:
1.我们自己的进程正在调用 TerminateProcess()
2.其他人正在杀死我们。

要捕获自杀式调用堆栈(案例 1),您只需要运行“Adplus -crash -CTCFG ...”
,唉,这无助于解决我们的客户问题。

我们开始对我们的客户耳语,“也许有人在杀死我们,也许是病毒或其他什么……?!”。
客户对此持怀疑态度(“幽灵 / 病毒 / 守护进程?”),但就在我们被踢出去之前,我们被一些系统管理员的供词所救。他想起了他们定期运行的脚本来监控我们的进程。该脚本错误地认为我们被绞死并强制终止进程(Yack!)。

现在问题来了:
下一次,我们想要一个工具或技术来捕捉谁正在杀死我们的进程?(我知道有一些黑客工具可以避免被杀,但我只想记录连环杀手进程 PID/NAME 是什么。)

他们有任何官方/非黑客的方式来做到这一点吗?

0 投票
1 回答
216 浏览

.net - 将 AdPlus 与 ASP.NET 应用程序一起使用需要进程 ID

我想使用 AdPlus 来诊断内存不足错误。要运行“挂起”内存转储,我需要提供我的应用程序的进程 ID。那会是什么,我该如何找到它?

0 投票
2 回答
1799 浏览

.net - 使用 WinDbg 和 ADPlus 7.0 帮助捕获 AV

我想在 SQL Server Compact Edition 中捕获内存访问冲突,如 http://debuggingblog.com/wp/2009/02/18/memory-access-violation-in-sql-server-compact-editionce/ 中所述配置是:

我下载了最新的调试工具并观察了微软将 adplus 工具重写为托管代码的内容并更改了配置文件的语法。我像这样重写配置文件:

我收到错误“找不到代码异常:clr;av”。如果我理解正确它没有加载 sos 扩展,但我找不到我应该用来加载它的正确部分和语法。

adplus_old.vbs - 由于某些原因没有在 Windows 7 上启动进程。WinDBG 6.12.0002.633 X86 ADPlus 引擎版本:7.01.002 02/27/2009

也许有人有一个使用最新的 adplus.exe 调试 .NET 应用程序的工作示例?

0 投票
1 回答
8569 浏览

adplus - 第一次机会与第二次机会例外

当我使用 ADPlus 生成转储文件时,我得到了第一次机会和第二次机会异常,但是当我使用任务管理器生成转储文件时,我只得到一次转储文件。这是第二次机会例外吗?无论如何,我对这个第一次和第二次机会异常感到有点困惑,即使我已经阅读了一些关于它的内容。可能是如果有人可以提供一些很好的类比,那可能会为我澄清事情

0 投票
1 回答
2564 浏览

adplus - 带有 Windows 调试工具的 ADPlus.exe - 与 ADPlus vbscript 相比有什么功能差异

我已经安装了新版本的 Windows 调试工具,并获得了 AdPlus.exe。我不知道是否有任何更改,但我记得前一段时间我在另一台计算机上安装它时,我得到的是一个 ADPlus 作为 vbscript 文件(而不是可执行文件)。在安装目录中,我仍然看到有一个 vbscript 文件,但有人知道可执行文件和 vbscript 有什么区别吗?谢谢

0 投票
1 回答
1900 浏览

.net - 如何在没有在 Windows 7 上显式运行 AdPlus 的情况下在崩溃时创建进程迷你转储?

我有一个 .NET 进程,有时会在某些 3rd 方库的本机代码中出现 AccessViolationException 失败。

发生这种情况时,我希望有完整的内存迷你转储。我已阅读此页面 - http://support.microsoft.com/kb/931673,“收集用户模式转储”部分并按照文章说明配置注册表。但是,当崩溃发生时,会创建一个非常小的报告 - 看不到 *.mdmp 文件。

现在,我知道如何在 ADPLus 中运行该进程,或者如何使其附加到已经运行的进程。但它需要显式运行 ADPLus。

我想知道如何将 Windows 配置为自动运行 ADPlus,每次我启动有问题的进程时,无论它是如何启动的 - 从 msbuild、双击、从控制台脚本等......

意思是,当运行 aaaa.exe 时,会被运行带有某些标志的 ADPlus 替换,这些标志会生成带有相应命令行选项的 aaaa.exe。

我知道 Windows 中有图像执行标志,可以做到这一点,但我不知道细节。

谢谢。

编辑1

保留命令行参数很重要,因此如果使用标志运行 aaa.exe,那么从调试器运行 aaa.exe 时当然也应该如此。

0 投票
1 回答
1671 浏览

c# - 调试 winform 崩溃 - C# [ADPlus + Windbg]

这种难以重现的异常是非常不可预测的。我附加了我的 Visual Studio 调试器并运行了 7-10 次测试,并且能够成功捕获此堆栈跟踪。请注意,这些都不是我的代码,所以在 Windows 级别发生了一些令人毛骨悚然的事情。顺便说一句,我们使用 PInvoke 打开/关闭 iexplore、记事本等窗口。

经过一番搜索后,根据微软那个人的建议,我尝试使用 ADPlus 来获取内存转储和 Windbg 进行分析,但我从 windbg 获得的信息比异常本身更加神秘。

可能有一些专家可以理解这些信息,我不能。

那么,你们如何分析这类问题呢?.Net 的“JVM 堆转储分析器”之类的东西?

环境:Windows XP SP3 [完全访问权限,管理员]