问题标签 [minidump]
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.
.net - minidump 与 fulldump 对比?
我最近才开始查看转储文件,以帮助我分析工作中生产环境中 w3wp 进程的崩溃...
我想知道,minidump 和 fulldump 文件有什么区别?
visual-studio-2010 - 加载转储文件;VS 找不到我的源代码
我正在 VS 2010 中开发一个 .NET 4.0 应用程序。
我第一次尝试使用转储文件,但是在将小型转储加载到 VS 时,我无法调试它,因为 VS 找不到源文件。
这是我所做的:
- 在
Options -> Debugging -> Symbols
我添加了我的应用程序的构建目录,其中包含 pdbs。 - 在 VS 调试器中运行应用程序。已选中
Debug -> Break All
。 - 已选中
Debug -> Save dump as
- 转到Windows资源管理器中的转储文件并打开它。这打开了一个新的 VS 实例。
- 我单击“混合调试”。这打开了一个新标签,上面写着
"There is no source code available for the current location
。
我试图弄清楚为什么 VS 没有加载我的 pdb:
- 打开
Debug -> Windows -> Modules
Symbol Status
MyApp.exe的列显示“已加载符号”。- 对于 MyApp.vshost.exe,它说“无法找到或定位 PDB 文件”。
- 右键单击 MyApp.exe,选择“符号加载信息”。它说“MyApp.pdb:已加载符号”。
- 对 MyApp.vshost.exe 做了同样的事情。它说vshost32.pdb: 找不到或打开 PDB 文件。. (注意它是如何寻找一个名为 vshost32.pdb 而不是 MyApp.vshost.pdb 的文件,出于某种原因)
那么,有什么想法吗?
c# - 如何打开 C# 故障转储 (Minidump)
我们的 C# 应用程序在出现未处理的异常时调用 MinidumpWriteDump。
我从用户那里收到了一些故障转储,我似乎无法使用 SOS 打开故障转储并查看导致崩溃的异常。
我们采用的转储类型是MiniDumpWithPrivateReadWriteMemory
我将我的 _NT_SYMBOL_PATH 配置为使用 MS 公共符号服务器,并且在 WinDBG 中调试此故障转储时,它会自动下载所需的 DLL(因为此转储是在具有不同版本 .NET 2 的机器上进行的 - 即结束的那个0.3053)
运行时!线程我得到这个输出:
请求线程存储失败
我浏览了所有可能的站点,这些站点解释了处理不同版本的 CLR 的技术,而不是在转储机器中使用的技术,没有一个对我有用。
我该怎么做才能调试这些崩溃?
我们是否做错了什么(从 .NET 进程中获取错误类型的转储等)
编辑:
这是 ~* 的结果:
0:000> ~* 。0 Id:1338.258 暂停:0 Teb:7ffdf000 未冻结优先级:0 1 Id:1338.2a0 暂停:0 Teb:7ffde000 未冻结优先级:0 2 Id:1338.1fd4 暂停:0 Teb:7ffdd000 未冻结优先级:0 3 Id:1338 暂停。 : 0 Teb: 7ffda000 Unfrozen Priority: 0 4 Id: 1338.1148 Suspend: 0 Teb: 7ffd9000 Unfrozen Priority: 0 5 Id: 1338.b1c Suspend: 0 Teb: 7ffd7000 Unfrozen Priority: 0 6 Id: 1338.f94 Suspend: 0 Teb: 7ffd4000 解冻优先级:0 7 Id:1338.11b4 挂起:0 Teb:7ff4f000 解冻优先级:0 8 Id:1338.1814 挂起:0 Teb:7ff4e000 解冻优先级:0 9 Id:1338.1cc4 挂起:0 Teb:7ffdb1000 解冻优先级: ID:1338.1e48 暂停:0 Teb:7ffd5000 解冻优先级:0 11 Id:1338。
这是 !analyze -v 的结果:
windows - 使用 breakpad 创建 CLR 转储
我正在使用 Google Breakpad 在我的 Windows 应用程序崩溃时为其生成崩溃转储。
我的应用程序将 C++ 本机代码与 C# CLR 代码混合在一起。breakpad 生成的转储不包含任何 CLR 信息。
是否可以使用 Breakpad 打开 CLR 转储?创建 CLR 转储需要哪些 API?
visual-studio-2010 - 在 VS 2010 中调试 minidump 时遇到问题
我正在从 .NET 调用 MiniDumpWriteDump 来生成一个小型转储,并且效果很好。但是,当我将生成的转储加载到 VS 2010 中时,我看不到任何有用的信息。特别是,调用堆栈窗口看起来像这样:
它不包含任何托管帧,尽管我在托管代码的异常处理程序中编写转储。此外,它不包含位于我的 exe 中的任何帧。
知道为什么会这样吗?
顺便说一句,当我从 VS 调试器手动创建转储时,转储确实包含预期的托管帧。
编辑:
我发现了一个关于此的Microsoft Connect 问题。它说:
目前 CLR 不支持托管进程进行自己的转储。
任何人都知道这是否仍然是真的?
.net - 使用 SOS.dll 进行事后 .NET 调试
我正在开发一个混合模式应用程序(C++/CLI、C++、一些 C#),当它在现场崩溃时,会创建一个内存转储。我通常从客户那里得到这些转储,并试图找出问题所在。
问题是 - 如何处理托管代码的事后调试?我通常将 WinDbg 与 SOS.dll 一起使用,但 SOS 似乎不向后兼容!我最近运行了 Windows 更新,现在我无法从客户端站点加载任何小型转储。它抱怨错误的 SOS 版本。
如何获取和加载以前的版本?我做错了什么?
.net - 启用优化的小型转储中的本地值
我正在为我的托管应用程序生成小型转储。这是我到目前为止所拥有的:
- 我已经设置了一个异常过滤器,如本文所述。在过滤器中,我调用 MiniDumpWriteDump。
- 我已经能够在 VS 调试器中加载生成的转储,浏览调用堆栈并查看本地值。
但是,当在我的项目中启用优化时,locals 的值是不可访问的(我得到"The value of the local or argument 'x' is unobtainable at this time"
)。现在,我知道为什么会发生这种情况了——优化可以做一些事情,比如重用局部变量,这意味着编译后的代码不再反映源代码。
我的问题:有解决方法吗?某种方式既可以优化代码又可以访问本地人?我不反对使用第三方工具来生成/查看 minidump。
minidump - 我如何观察一个进程并在它崩溃时生成一个小型转储(如 PROCDUMP)?
我发现了许多关于如何在需要时手动创建故障转储的帖子,但我想做的是确保在受监控的应用程序崩溃时生成故障转储。
TechNet PROCDUMP 工具可以完美地做到这一点。我想知道的是如何在我自己的管理程序中编写一些代码来做同样的事情,这样我就只在发生异常时创建一个转储文件。
我的程序是一个服务应用程序,它知道我希望监控的程序的进程 ID。
为了澄清起见,我想模仿这个对 PROCDUMP 的调用会做什么:
procdump -e someprocess.exe -w
从理论上讲,Windows 应该能够使用 DrWatson 为我完成这项工作。我遇到的问题是我有大约 200 个正在运行的客户系统声称我们的应用程序随机崩溃。Watson 博士似乎并没有确认我们的应用程序正在崩溃这一事实,所以我决定我宁愿让崩溃转储生成由我们自己的软件控制。
我已经设法让我自己的应用程序使用 __try/except 和 MiniDumpWriteDump() 和 MiniDumpWithFullMemory 类型创建自己的转储。但是我不能用 WinDbg 查看局部变量等,所以我猜这是因为它有是从应用程序本身内部触发的.. 所以.. 我想要一个监控/管理类型的应用程序来完成这项工作的另一个原因。
至少..一个应用程序如何对另一个应用程序崩溃做出反应?您是否必须安装某种调试钩子或假装管理程序实际上是自定义调试器?
干杯
.net - WinDbg中出现“SOS的版本与你正在调试的CLR版本不匹配”怎么办?
我的一些应用程序有问题。它是在 Windows 2003 Server (x86) 的 IIS6 下运行的基于 wcf 的应用程序:
在事件日志中,我从“W3SVC-WP”源 (EventID=2262) 收到这样的错误:
我试图弄清楚发生了什么。我已经为孤儿工作进程设置了创建转储,如本KB中所述。当发生死锁时,会创建一个小型转储。
然后我用这个小型转储来尝试了解发生了什么。这是我卡住了。
我运行 WinDbg x86,打开我的转储,然后:
如何处理这个错误- “SOS 的版本与您正在调试的 CLR 的版本不匹配”?
我在 VS2010 中打开 minidump 时遇到了同样的错误(“SOS 的版本与您正在调试的 CLR 的版本不匹配”)。
我读过这篇文章 - http://tech-thinker.com/Forums/tabid/62/forumid/12/postid/471/scope/posts/Default.aspx,并尝试安装KB2518870。它没有帮助。
stack-trace - 从 minidump 中提取堆栈跟踪
我试图弄清楚如何从 Windows 上的 minidump 文件中读取故障线程的堆栈跟踪。有简单的解决方案吗?我找不到一个。
抱歉,我忘了提,我需要以编程方式进行。
我应该使用 DbgEng 来做吗?
谢谢