问题标签 [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.
linux - GDB - 从外部“.sym”文件加载调试信息
我正在尝试在 linux 系统上对崩溃的二进制文件“TestApp”进行事后分析。
我有一个二进制文件和共享对象的副本,它们以路径复制到设备上:
此文件夹包含在被测系统上使用的目录结构中的所有相关二进制文件,即:
自动构建过程会从二进制文件中剥离调试信息,并将它们存储在外部符号文件中,全部位于:
因此,上述二进制文件的符号信息将存在于名为:
如何让 GDB 知道这些外部符号的存在并加载它们?
我通常通过以下方式调用 GDB:
我参考了其他关于创建测试.gdbinit
文件并通过-command
参数将其传递给 GDB 的文章,但它似乎不起作用。每次我试图从我的核心文件中获取回溯时,我都会从 GDB 中得到一个指示,它无法打开调试符号。解决此问题的任何帮助表示赞赏。
谢谢你。
debugging - 为 Windows 服务设置事后调试器
是否可以在 Windows 服务崩溃时创建完整的内存转储?显然,有众所周知的事后调试器,它可以收集失败进程的内存转储。但 Windows 服务的问题在于它们在系统上下文中运行,而不是在用户上下文中运行。有谁能够帮我?
到目前为止,我用 WinDbg 尝试过:
- 我通过执行 WinDbg -I 将 WinDbg 设置为默认的事后调试器。
- 我确认在注册表的两个位置(HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug 和 HKLM\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AeDebug)中存在 Auto 和 Debugger 这两个条目。
- 我将 WinDbg 配置为在启动时自动写入内存转储,方法是将 Debugger 条目更改为 "Path\WinDbg.exe" -p %ld –c ".dump /ma /u D:\CrashDump.dmp" -e %ld –g
- 我验证了 WinDbg 对内存转储文件的目标位置具有和不具有管理权限的权限。
但它不起作用。:(
如果我编写一个在启动后故意崩溃的普通用户模式应用程序,WinDbg 会弹出并自动将 .dmp 文件写入目标位置。但是,如果我的服务崩溃,它不会。在任务管理器中,我可以看到 WinDbg 在我的服务进程崩溃后启动,但两者都只保留在列表中,没有任何转储文件。
c++ - 故障转储分析:CxxUnhandledExceptionFilter
我有一个崩溃小型转储要分析。我的程序是多线程 Qt5 应用程序。我不是调试专家,但通常我可以很容易地找到程序失败的地方,但这次我不能。我在 Visual Studio 2010 中打开了转储文件,单击“仅使用本机调试”,它向我显示了问题所在:它是位置为“__CxxUnhandledExceptionFilter”的线程。调用栈是这样的:
我希望看到带有程序函数和 Qt 内部函数的堆栈。但是这个调用堆栈没有告诉我任何有趣的事情。所以请告诉我什么是“ExceptionFilter”线程,我怎样才能找到程序实际失败的地方?
c# - 如何在设备上调试 CE 应用程序?
我在这里问了一个类似但不相同的问题
我的 Windows CE 应用程序甚至无法在手持设备上启动(它的旧版本会启动,但新版本不会启动)。
它构建,复制,但只是拒绝运行;当我双击它时它“闪烁”,但就是这样。没有错误的消息,只是不会让步。
我添加了一个全局异常处理程序,希望它能够发现问题并通过以下代码让我一睹它的风采:
……但还是不行;从小家伙那里听不到任何声音。
我能做些什么来找出正在发生的事情/为什么这只小野兽拒绝回应它的叫醒电话?
更新
问题是否与此有关,如果是,如何解决?
这个现有应用程序的更新版本和一个全新的简单应用程序都拒绝运行的情况表明,在编码、构建或部署过程中的某个地方存在根本缺陷。
c# - 如何从 ASP.NET 进程转储到托管调用堆栈?
我们有一个大型的 ASP.NET 应用程序,它偶尔会因为StackOverflowException
s 崩溃。因为.NET 不能很好地处理这些问题,所以我们只能在没有任何正常异常日志和堆栈跟踪的情况下进行事后调试。一旦我们找到问题发生的位置,通常很容易解决;困难的部分是指出错误发生在代码库的哪个位置。
我们在崩溃后获得的进程转储文件似乎对这项工作有很大帮助,但到目前为止,我们一直无法弄清楚如何最好地使用它。您可以(非常、非常、缓慢地)使用 Visual Studio“调试”该过程,但这基本上需要永远加载 MSFT 符号,然后不会为我们的应用程序 DLL 加载符号(因此您看不到有趣的部分调用堆栈)。
似乎必须有一个简单的方法:
- 故障转储文件
- 设置的托管应用程序 DLL/PDB
到完整的托管调用堆栈;任何人都可以描述(或指向教程)这样做(使用 VS、WinDbg 或任何其他工具)吗?
c# - .NET >= 4.0 中的 StackOverflowException - 让其他线程有机会优雅地退出
有没有办法至少推迟托管应用程序的终止(几十毫秒)并设置一些共享标志以让其他线程有机会优雅地终止(SO线程本身显然不会进一步执行任何事情)?我正在考虑为此使用 JIT 调试器或 CLR 托管 - 如果有人之前尝试过,我很好奇。
为什么我想做这么错的事?:
没有太多细节——想象一下这个类比——你在赌场赌轮盘赌,突然发现轮盘赌是不可靠的假货。因此,您想立即离开赌场,但可能想先从赌桌上取回您的赌注。不幸的是,我不能为此利用单独的流程,因为有非常严格的性能要求。
试过但没有用:
StackOverflowException 的 .NET 行为(以及 MSDN 上的矛盾信息)已经在 SO 上讨论过多次 - 快速总结一下:
HandleProcessCorruptedStateExceptionsAttribute(例如在 appdomain 未处理的异常处理程序上)不起作用
ExecuteCodeWithGuaranteedCleanup不起作用
legacyUnhandledExceptionPolicy不起作用
可能很少有其他尝试如何处理 StackOverflowExceptions - 但似乎很明显,CLR 终止了整个过程,正如Hans Passant在这个很好的答案中提到的那样。
考虑尝试:
- JIT 调试器 - 冻结异常线程,设置一些共享标志(可能在固定位置)并在短时间内解冻其他线程。
- CLR 托管和设置未处理的异常策略
你还有别的想法吗?或者这两种方式的任何经验(成功/不成功)?
c# - 在应用程序启动之前启动 procdump?
我有鸡和蛋的问题。
我有一个应用程序在客户端机器上的应用程序启动时崩溃,有时会出现 TypeInitializerException,但有时会失败。
我正在考虑使用 procdump 来收集内存转储,但它需要实例正在运行才能附加到进程并等待异常。
我无法在不启动应用程序的情况下附加 procdump,并且应用程序在启动时崩溃。
我可以尝试从 WinDbg 中启动应用程序,但我并不总是遇到异常,所以不确定它是否有帮助。
有什么想法或建议吗?
该应用程序是针对 .NET Framework 4.5 编写的,并且在 Windows Server 2008 R2(带有最新更新)上运行。到目前为止,我还无法在我的机器上本地复制它。
google-chrome - 如何调试 chrome 崩溃?
我的应用程序在几个小时后崩溃了 chrome 标签,我想了解为什么会这样。
我该如何调试呢?看看这是否是内存泄漏?如果它是内存泄漏 - 我可以在崩溃时获得堆视图吗?
crash-reports - Windows 错误报告坚持不要在软件崩溃时创建完整转储
我正在尝试在生产机器上调试我的应用程序。它大约每 2 天崩溃一次,我不知道为什么。
几天来,我一直在尝试让生产机器在程序崩溃时产生完整的崩溃转储。有时确实如此,但有时,它不会生成完整的故障转储,而是创建简短的文本文件,其中仅列出所有已加载的模块并说明程序已崩溃。这些短文件保存在 %LOCALAPPDATA%\Microsoft\Windows Error Reporting\ReportArchive 中。
对于我的一生,我无法理解为什么会这样!我不能要求这些用户运行 adplus 或 windbg 或类似的东西。每次程序崩溃时,我只需要创建一个崩溃转储。
有人可以帮忙吗?我附上了 WER 的完整注册表设置。这些存在于 HKEY_LOCAL_MACHINE\Software\Wow6432Node 和 64 位节点上。如您所见,LocalDumps 键指向 C:\ProgramData\Microsoft\Windows\WER\LocalDumps 以保存故障转储,是的,每个人都拥有此文件夹的完全权限。
gulp - 查看 gulp 异常的完整堆栈跟踪
gulp watch 任务不断抛出异常,堆栈跟踪限制为 10 帧,所以我不知道它的来源。我猜这必须在某处可配置,但我无法确定在哪里。我查看了 gulp.config.js 和 gulp.util.js。我阅读了这份报告,但我认为它一定比这更容易。
谁知道如何做到这一点?