【问题标题】:How to find out why application crashes - Win 10 LTSB如何找出应用程序崩溃的原因 - Win 10 LTSB
【发布时间】:2018-10-12 14:25:13
【问题描述】:

我有使用 VS 2017 15.7.4 构建的应用程序,它是 64 位命令行 C++ 应用程序。

我已将它与所有依赖项 DLL 一起复制到装有 Windows 10 Enterprise 2016 LTSB 64 位的机器上(版本为 10.0.14393)。应用程序有效。

然后我将它复制到另一台具有相同版本 Windows 的机器上。它立即停止并显示消息停止工作

edit:找到原因,详情在cmets中

我试图解决的问题:

  • Visual Studio 2017 可再发行组件不会改变这种情况。
  • 事件日志中有一些崩溃事件,事件 1001:没有任何有用的信息,除了所有依赖模块 dll 已加载。
  • 事件 1000:无用
  • 事件 1005 有消息:

Windows 由于以下原因之一无法访问该文件: 网络连接有问题,该文件的磁盘 存储在此计算机上,或安装在此计算机上的存储驱动程序;要么 磁盘丢失。 Windows 关闭了 my_program.exe 程序,因为 这个错误。

程序:my_program.exe 文件:

错误值列在附加数据部分。用户操作

  1. 再次打开文件。这种情况可能是暂时的问题,当程序再次运行时会自行纠正。
  2. 如果文件仍然无法访问并且
    • 它在网络上,您的网络管理员应该验证网络没有问题并且服务器可以 已联系。
    • 它位于可移动磁盘上,例如软盘或 CD-ROM,请确认该磁盘已完全插入计算机。
  3. 通过运行 CHKDSK 检查并修复文件系统。若要运行 CHKDSK,请单击“开始”,单击“运行”,键入 CMD,然后单击“确定”。在命令下 提示,键入 CHKDSK /F,然后按 ENTER。
  4. 如果问题仍然存在,请从备份副本中恢复文件。
  5. 确定是否可以打开同一磁盘上的其他文件。否则,磁盘可能已损坏。如果是硬盘,请联系您的 管理员或计算机硬件供应商寻求进一步帮助。

附加数据错误值:00000000 磁盘类型:0

  • 我尝试在不同的机器上编译它,使用 VS 2017 15.8.4(不同于 15.7.4),然后二进制文件在目标机器上工作。不过,这不是解决方案,因为这台机器不用于“夜间构建”。
  • Depends 不显示任何缺失的依赖项

【问题讨论】:

  • “如何找出应用程序崩溃的原因” - 使用调试器。
  • 嗯,这很难做到,因为它是没有调试器和发布二进制文件的生产机器。感谢您指出这一点,我将不得不尝试。我的猜测是,它是在程序本身启动之前的东西,DLL 或什么的东西......因为它在启动后立即崩溃。
  • 您可以使用远程调试工具。即使对于发布版本,生成(但不是必须分发)调试符号也是一个好主意。
  • 继续阅读postmortem debugging
  • @MiroJanosik 调试发布版本可能很困难。如果您甚至没有调试符号,那么 非常 很困难。但不是不可能的。始终为您的发布版本生成调试符号。

标签: c++ windows crash


【解决方案1】:

正如评论者指出我找到答案的正确方法: 事后调试 - 附加 WinDbg - 向我显示错误是“非法指令”,该指令也是“vmovdqu”,它是 AVX 指令。并且实用程序CoreInfo显示本机CPU不支持AVX指令。解决方法是在没有这个支持的情况下编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2011-11-14
    • 2014-12-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多