Windows 我可以使用什么工具来捕获导致应用程序崩溃的所有输入?

Windows 我可以使用什么工具来捕获导致应用程序崩溃的所有输入?,windows,debugging,crash,Windows,Debugging,Crash,我需要一个Windows工具来记录导致程序崩溃的输入和调试信息。我不是说一个女人!例如,让我描述一个场景来解释我在说什么 有时在使用程序时,它会在没有已知原因的情况下崩溃,而当我想调试它时,我找不到有用的信息来了解崩溃是如何发生的,因为导致崩溃的数据不再存在于任何地方 所以我需要一个工具来记录所有的输入和调试信息,以便能够重用输入数据,并在调试器下重现崩溃,如和,以便了解崩溃是如何发生的 编辑:我需要能够为我没有编写的程序执行此操作。假设我没有查看或修改其源代码的权限。您使用的是什么编译器/ID

我需要一个Windows工具来记录导致程序崩溃的输入和调试信息。我不是说一个女人!例如,让我描述一个场景来解释我在说什么

有时在使用程序时,它会在没有已知原因的情况下崩溃,而当我想调试它时,我找不到有用的信息来了解崩溃是如何发生的,因为导致崩溃的数据不再存在于任何地方

所以我需要一个工具来记录所有的输入和调试信息,以便能够重用输入数据,并在调试器下重现崩溃,如和,以便了解崩溃是如何发生的


编辑:我需要能够为我没有编写的程序执行此操作。假设我没有查看或修改其源代码的权限。

您使用的是什么编译器/IDE

很可能,它包含一个调试器,您可以将它附加到任何正在运行的进程(如应用程序),无论您是否从IDE中启动它。这将允许您在程序意外崩溃时查看变量的当前值,并向您提供堆栈跟踪(或有用的诊断信息)。VisualStudio附带的调试器特别好,如果您正在开发C++或.NET应用程序。 另一种选择是在应用程序中实现广泛的日志功能。您可以定期将有关程序当前状态的详细信息写入文件或Windows事件日志,然后在崩溃后检查这些信息。如果您试图调试客户端站点上发生的错误,这将特别有用,因为它们可以将日志文件发送给您进行分析

如果您正在谈论记录导致应用程序崩溃的特定用户输入集,那么日志记录可能是最好的选择


您可以使用一些日志库来简化这项工作。但是,如果不知道您使用的是哪种语言,就很难提出具体的建议。例如,如果您正在开发.NET应用程序。我听说了Java开发的好消息。是C++应用程序的一种选择。另请参见。

我想堆栈跟踪必须帮助您调试该问题。你可以用

windbg

调试诊断


获取崩溃转储的工具。我发现这真的很有用

你告诉我你必须调试一个你没有编写的代码,却没有代码可看。
根据我的经验,这并不容易,但…
您可以将drwtsn32配置为在程序崩溃时写入输出文件(如果S.O.上仍然存在)

旧样式的输出是drtwsn32.log(从NT 4.0到实际的Windows 7的Windows版本将该文件放在磁盘上的不同位置,只需查找该文件),它提供堆栈跟踪、注册表和少量内存转储。实际上,您应该拥有原始程序的.map文件,以便识别崩溃的函数,甚至是崩溃发生的代码行(有一种很方便的方法我很久以前就开始使用了……但是您需要一个完整的map文件)

较新版本的drwtsn32生成一组文件。他们是

  • appcompat.txt
  • manifest.txt
  • program.exe.hdmp
  • program.exe.mdmp
它们是内存和进程转储。使用Microsoft IDE/调试器作为Visual Studio 2008/2010打开它,请参见。
它显示完整的调用堆栈、内存状态、所有注册表等。如果您还有崩溃程序的.pdb文件,您应该能够知道哪个是函数和代码行,但是。。。没有源文件,我想你是在黑暗中运行

所以。。。地图文件或PDB文件应该存在,否则我认为您将面临一项非常艰巨的工作


HTH

我的编译器工具没有配备“放荡者”。我太失望了……我可能得自己写了!(很抱歉拿你的英语开玩笑,巴拉卡特,但是如果你查一下“放荡”的英语定义,我想你会同意在这种情况下它很搞笑。)@吉姆·刘易斯:我的IDE做了。我想他们称之为“智能感知”。这绝对是“让我远离卓越或美德”;-)@科迪:我想我是在想更多关于亚洲开发银行或类似工具的事情。“继续……重新设置那个标志……你知道你想这样做的!最糟糕的情况是什么?”但我认为Intellisense符合它自己的定义。@Barakat:我仍然不确定什么是“模糊化”工具。这是语言翻译问题还是打字错误?此外,如果您编辑问题以指定用于编写应用程序的语言/编译器/IDE,则更容易提供一个好的答案。@Cody:我以前听过“模糊化工具”一词……其思想是用随机输入、数据包或事件流来呈现被测程序,并查看它如何支持意外或无效的输入。如果程序已经存在,并且没有崩溃和调试日志,该怎么办?我相信只有当我是这个程序的开发者时,我才能使用它。@Barakat:你说得对;您将无法将日志添加到无法访问其源代码的程序中。你的问题不清楚你不是这个程序的开发者。在这种情况下,您唯一的选择是将调试器附加到程序的运行进程,或者在用户计算机上安装击键记录器。