问题标签 [procdump]

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 投票
3 回答
2916 浏览

service - Using ProcDump to obtain the dump of a service?

Does anybody know if its possible/ how to use ProcDump to obtain the dump of a windows service? The command I want to run is like this:

However I get the Cannot Start Service from command line or debugger message. Does anybody know if there is a way around this?

0 投票
0 回答
942 浏览

service - 作为本地服务或本地系统运行时,从 64 位服务启动 procdump 不起作用

还发布在:http: //forum.sysinternals.com/problem-launching-procdump-from-a-64bit-service_topic27425.html

我们可能会在客户站点使用相同的可执行文件运行多个服务。我们在我们的程序“启用procdump”中添加了一个设置,并指示客户下载procdump并将其放在我们的bin目录中。

如果设置为 on,我们会在服务启动时启动 procdump(指​​定进程 ID)。

问题是:当作为“本地服务”或“本地系统”运行时,procdump 不适用于我们的 64 位服务器。当以具有管理员权限的域用户身份运行时,它工作正常。如果我们从命令提示符手动启动它,它也可以正常工作。看起来当我们手动运行它时,我看到在任务管理器中创建了两个 procdump 进程:procdump *32 和 procdump64

当我们的 64 位服务作为“本地服务”或“本地系统”运行并启动 procdump 时,只显示 procdump*32。我假设它应该启动 procdump64 的方式失败了。 它也无法创建转储,并且如果我 taskkill 服务(通常它退出)则无法终止。

关于为什么会这样的任何想法,或者我是否可以做些什么?运行 procdump 的帐户是否需要一些权限?

0 投票
1 回答
1511 浏览

c# - 运行 ProcDump 时出错

这里有一个 ProcDump 教程:http: //drdobbs.com/blogs/parallel/229300328

我有一个崩溃的应用程序,所以我想看看 ProcDump 是否可以提供帮助。应用程序在其中,C:\Program Files\MyCompanyName\thebadapp.exe所以我将 ProdCump.exe 复制到 C:\ 并像这样打开它:

...但 Prodcump 正在回归:

目录 C:\Files\MyCompanyName\ 不存在

我做错了什么?

谢谢。

0 投票
1 回答
780 浏览

cygwin - 用于 Windows 进程的 Cygwin 转储程序?

Cygwin 包含一个程序dumper.exe

dumper 实用程序可用于创建正在运行的 Windows 进程的核心转储。

然而,它似乎只适用于 Cygwin 进程

我已经使用ProcDump有一段时间了,但我想改用 Cygwin 包中包含的程序。

0 投票
1 回答
14058 浏览

windows-7 - Windbg故障转储分析

我很难从使用 ProcDump 创建的故障转储中获取任何有意义的信息,但我很确定这与我一直遇到的看似随机的崩溃有关。

我有一个在 Windows 7 64 位上运行的 VB6 应用程序。每隔一段时间,它就会崩溃,在错误日志中留下一个条目,该条目导致 ntdll.dll 出错,但没有提供更多信息。因此,我一直在运行 SysInternals 的 ProcDump 来自动为我创建故障转储。

我无法在内部重新创建崩溃,所以我很确定如果我有一个转储,它会告诉我问题是什么。但是,在运行了一天的大部分时间后,我看到 ProcDump 已经写了几个转储,尽管程序仍然运行良好。它似乎确实指出了 ntdll.dll 的问题,但我不知道从哪里开始对此进行修复。

在其中一个转储上运行!analyze -v给了我以下信息:

谁能指出我正确的方向,就理解这个条目而言,我能做些什么?

0 投票
1 回答
7936 浏览

windows - procdump -t -- 进程终止时的转储 -- 是如何使用的?

这个问题可能有点尴尬,但这是我的详细问题:

目前,我正在研究设置SysInternals 的 procdump.exe来监控我们的应用程序,该应用程序表现出虚假的消失——也就是说,用户报告说,在应用程序的短暂可见挂起后,该应用程序只是“消失”了,没有任何痕迹窗户。

我的第一个想法是运行procdump -e -x . MyApp.exe它会在应用程序遇到未处理的异常时记录崩溃转储,但后来我看到还有一个-t开关,即——

-t - 进程终止时写入转储。

进程终止时自动生成转储。

现在的问题

我已经用我们的应用程序测试了 -t 开关,方法是在我可以触发它的定义位置插入ExitProcess或调用。TerminateProcess

虽然应用程序的行为符合预期,即TerminateProcess立即“杀死”正在运行的应用程序并ExitProcess需要一段时间,因为全局清理正在运行,但以这种方式生成的转储在这两种情况下都是无用的。

我得到的转储-t总是只包含一个单线程(应用程序在终止时运行超过 20 个线程)并且调用堆栈甚至不在有用的位置。(它似乎只是来自已终止应用程序的一个随机线程。)

难道我做错了什么?我可以有用地procdump -t追踪进程退出函数的意外调用吗?

0 投票
1 回答
770 浏览

windows - ProcDump 转储错误的线程

看起来 ProcDump 转储了错误线程的事后转储。使 ProcDump 成为 JIT 调试器:

做了一个测试程序C++ MFC:

从(ProcDumpTest.exe 程序的)菜单中选择 Crash 项,应用程序崩溃并进行转储。然而,转储显示 (windbg) 一个堆栈和一个意外线程的指令指针 (eip = 7c90e514)。如何获取发生错误的线程的堆栈跟踪?

在更严重的情况下遇到了同样的问题。谢谢你的帮助!G更多

0 投票
1 回答
1882 浏览

pid - 达到 CPU 阈值时自动生成 w3wp.exe 进程转储文件,即使 PID 更改也是如此

我正在尝试解决我们的一个网站导致 CPU 间歇性飙升的问题。该站点位于 Web 服务器场上,并且在不同时间在所有服务器上间歇性地发生。导致峰值的进程是 w3wp.exe。我已经检查了所有明显的东西,现在想分析导致峰值的 w3wp.exe 的多组转储文件。

我试图在 w3wp.exe 进程在指定时间内达到指定的 CPU 阈值时自动生成转储文件。

我可以使用 ProcDump.exe 来执行此操作,如果它在 PID(进程 ID)更改之前被触发,它会起作用。

例如:( procdump -ma -c 80 -s 10 -n 2 5844其中 5844 是 PID)

  • -ma 写一个包含所有进程内存的转储文件。默认转储格式包括线程和句柄信息。
  • -c 创建进程转储的 CPU 阈值。
  • -s 在写入转储之前必须达到连续秒 CPU 阈值(默认为 10)。
  • -n 退出前要写入的转储数。

上面的命令将监控 w3wp.exe,直到 CPU 在 10 秒内达到 80% 的峰值,并且至少需要两次迭代才能完全转储。

问题:

我有多个 w3wp.exe 实例正在运行,所以我不能使用进程名称,我需要指定 PID。每次回收应用程序池时,PID 都会更改。这会导致 PID 在我捕获多个转储文件之前发生变化。然后我需要在每个 Web 服务器上再次启动 procdump。

我的问题:

即使在 PID 更改后,如何继续自动生成转储文件?

0 投票
0 回答
134 浏览

procdump - ARM设备的procdump?或者我如何捕捉 ARM 设备中的崩溃?

我必须在 ARM 设备上捕获特定应用程序的崩溃。procdump 适用于 x86 和 x64 架构,但不能在 ARM 上运行。任何指针?

0 投票
1 回答
1445 浏览

.net - 从应用程序内部执行 procdump 以创建应用程序本身的转储

我正在尝试让我的应用程序(针对框架 .NET 4.0 编译的 VB.NET)编写自身的进程转储以帮助我进行调试。为此,我正在使用 Sysinternals 的 Procdump。

首先,我只需在单击事件上执行以下代码(因此调用堆栈上应该有可识别的内容):

最后一行也是一个断点。

要创建转储,我在 VS 2010 中以调试模式启动应用程序,单击按钮以执行此代码,当它遇到断点时,我知道转储已被写入。此时,我还使用 Visual Studio 创建了另一个转储文件(Debug -> Save Dump As..)。

这给我留下了两个大小大致相等(400 Mb)的转储文件,一个由 Procdump.exe 创建,一个由 Visual Studio 创建。在不触及任何已构建的代码的情况下,我现在打开两个转储文件(在构建代码打开的情况下,我按 Ctrl+O)并在符号文件夹选项中指定调试输出文件夹。

现在,当我在 Visual Studio 创建的转储上单击“混合调试”时,我得到一个调用堆栈(在主线程上),其中包含可识别的方法名称,并且调试器将它很好地定位在源代码中的断点位置曾是。

但是,当我在 Procdump 创建的转储上单击“混合调试”时,(主线程的)调用堆栈仅包含诸如 clr.dll!6cb34e46()、KERNELBASE.dll!75106a8e() 和 ntdll.dll 之类的东西! 76f07094() 在顶部。没有可识别的代码,也没有与手表相关的内容。

这是为什么? 实际上,我期望这两个转储几乎相等(仅通过几行代码)。 [与附加的调试器有关,请参阅下面的编辑。]

请注意,在这两种情况下都正确加载了符号。我在 Debug->Windows->Modules 中获得的列表显示了要为两个转储加载的相同符号。此外,如果我在两个转储中切换到后台线程,我会在两个转储中为这些(及其变量的值等)获得正确的调用堆栈。

编辑

我注意到,通过在没有附加调试器的情况下执行应用程序,我得到了预期的进程转储(即,等于 Visual Studio 捕获的进程转储,但相差一行)。问题解决了。但是我仍然很好奇为什么在附加调试器的情况下我没有得到这个结果。