问题标签 [postmortem-debugging]

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

windbg - Stuck with crash dump analysis - user32!NtUserSetFocus freezes app?

We have an old VB6 application that keeps freezing and/or crashing. We setup an easy shortcut for users to create a full dump when the program freezes.

We now have a week's worth of dumps, and most of them show a cryptic stack from the hung thread, which doesn't even include any of our functions, and the last call is to user32!NtUserSetFocus.

We're really stuck here... can anyone help?

!runaway proves that this is indeed the hung thread.

!analyze -hang -v produces the following:

0 投票
1 回答
3491 浏览

windbg - 从挂起分析中获取有关句柄的信息

我有!analyze -hang -v一个转储文件的以下结果。我看到线程 0 正在等待某个句柄被释放,如derived_wait_chain. 如何获得有关此句柄的更多信息?!handle 784.183c返回错误...

0 投票
3 回答
2297 浏览

c# - 为 Windbg 获取正确的 .net 原生符号

我正在做一些故障转储调试,我正在寻找从生产服务器获取的转储。我正在运行 WinDbg 的机器必须安装稍微不同的 .NET 运行时版本——我在加载 .NET 系统程序集的本机映像时遇到错误(例如,无法加载System.Data.Linq)。

确保我的调试机器可以访问所有正确符号的最佳方法是什么?

编辑 为 Thomas Weller 添加了 lmv 的输出

0 投票
2 回答
822 浏览

c++ - 如何确保优化期间不删除局部变量

背景

在工作中,我经常使用优化代码的核心转储进行事后调试。

对于某些类型的困难的不可重现的故障,我希望有额外的信息可供我使用。在这些情况下添加额外的跟踪是不可行的,因为绝大多数调用都是成功的,并且每分钟会添加数百万个“不必要的”跟踪,这将快速滚动日志文件。捕获和跟踪并不总是可行的,并且某些错误可能会破坏环境,导致跟踪失败。

由于我们的核心转储包括调用堆栈内存,我认为我可以使用调用堆栈内存上的一个区域进行“跟踪”。

问题

感谢优化编译器这样的代码不起作用

这个想法是通过分配给局部变量来将输入变量存储在堆栈上。这通常在调试模式下工作正常,但在优化构建中,编译器认为该语句没有副作用并将其删除。

alloca似乎它可以工作,除非我们针对一些不支持的平台,alloca而且我不确定它与 C++ 一起使用的效果如何。

我进行了一些实验,即使在优化的构建中,以下代码似乎也能够使状态“粘”在堆栈上:

问题

我可以期望代码做我想做的事吗?它似乎适用于我们当前的一组编译器(clang 和 gcc),但我可以期望它继续工作吗?

有没有更好的方法来实现我想做的事情?

更好是指更简单、更健壮或符合标准。

0 投票
0 回答
263 浏览

python - 当我没有控制台时,如何在未捕获的异常中输入 Python 的 pdb

我正在我们的开发商店中运行 Python 应用程序。它是从另一个 GUI 应用程序调用的。当它失败时,我希望在 pdb 事后调试中它停止的地方出现一个控制台,这样我就可以走过去看看当我们的用户遇到问题时发生了什么。

我尝试在程序顶部设置异常钩子:

这很好用,除非我还没有控制台,比如当我用 pythonw 启动它或从这个不是用 Python 编写的其他 GUI 应用程序调用它时。

有没有办法做到这一点?谢谢

更新:我忘了提到这一切都在 Windows 7 上

更新:添加最小代码示例。请注意,如果我使用 python.exe 而不是 pythonw.exe 启动它,这将按照我想要的方式工作,并且 pythonw 更类似于我在我的环境中所做的事情,我实际上有一个 C# GUI 加载这个来自 dll 的 Python 代码。

0 投票
0 回答
121 浏览

visual-c++ - 使用 MSVC .map 文件进行事后调试

我部署了一个 Windows 应用程序,它偶尔会崩溃。我在发布模式下构建了应用程序,没有调试符号,但使用 /MAP 选项以便在事后追踪错误。

错误信息是:

“App.exe 中 0x00007FF63113DA4D 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000000000000。”

所以我需要找出0x00007FF63113DA4D在哪里。

App.map 文件以

和一个典型的条目:

那么,如何将以“000000014”开头的地址与以“0x00007FF”开头的错误消息中的地址相关联?

0 投票
1 回答
4488 浏览

windows - 使用 WinDBG 从调用堆栈中查找 URL

我在转储文件中间歇性地收到浏览器挂起并出现此错误。

使用!analyze -v3 次崩溃后,我收到此错误并堆栈

但是,我永远无法在我的转储文件中找到失败的 URL。任何人都可以帮忙吗?

如何在此堆栈中找到失败的 URL?

0 投票
1 回答
357 浏览

.net - 具有大量句柄的 .Net 应用程序的高内存使用率

我正在使用带有进程转储的 WinDbg 对内存压力高的 .net 应用程序进行事后分析,该进程是 Windows 服务。

我有一种感觉,这个 14GB 的进程内存消耗中的大部分来自中止的线程,因此有很多孤立信号量/事件/突变等。但是我无法将所有这些放在一起并将它们加起来,就像它需要多少内存一样对于单个信号量/事件/突变体,什么样的 WinDbg 命令对这种情况有帮助?

以下是 WinDbg 输出:

!处理

!address -摘要

!threads(列出的许多线程都有 ThreadAbortException 异常)

0 投票
0 回答
113 浏览

debugging - 使用 .cxr 后如何避免“最后设置的上下文:”消息

在分析转储时,我必须进入.cxr真正的异常调用堆栈。

几乎我运行的每个命令在输出中都有“最后设置的上下文:”。这很烦人,尤其是在运行脚本时(在脚本的输出行之间和输出行内获取大量此类消息)。

有什么方法可以避免/抑制这些消息,或者可能从异常上下文是唯一上下文的现有转储创建新转储?

0 投票
0 回答
29 浏览

java - 从仍在运行的桌面图形 Java 程序中获取 stderr 事后分析?

我正在使用 jre 1.8.0_91 在我的 Windows 桌面上运行自定义图形 Java 应用程序。我刚刚遇到了一个故障,我认为它导致自定义 JTable 单元格渲染器死机。*整个程序仍在运行。

不幸的是,该代码不会记录 stderr(但会在我下次处理代码时立即记录!)。我从 Windows 资源管理器启动了 jar,所以没有控制台,据我所知,stderr 进入了位桶。(当我从命令行运行该过程时,我像往常一样在终端上获得 stderr。)

有什么方法可以从我正在运行的 Java 进程中提取如果最近有任何东西被转储到 stderr 怎么办?是否有任何 Java 范围的日志文件可以告诉我?


*症状,以防万一:自定义呈现的表突然变为普通的列视图,使用哈希码而不是引用对象的呈现内容(例如,CustomTable$TableEntry@1a2b3c)。我仍然可以与表格交互,这让我觉得只有渲染器死了。