更新

更新

当程序试图退出时,PuTTY 会崩溃。当它崩溃时,窗口会冻结,无论如何都不会关闭。强制关闭不起作用,任务管理器不起作用。pskill从 pstools(使用管理员命令提示符)没有任何效果——它说进程已被终止,但它仍然存在。除了重新启动计算机之外,没有什么能让窗口消失。

这种情况已经持续了几个星期,可能是最近的 Windows 更新导致的,但这只是猜测。这种情况并非每次都发生,但可能有 50% 的概率。无论是通过键入“exit”或“logout”调用手动退出,还是由于计算机进入睡眠状态而自行退出,它都会崩溃。

仅当我使用端口隧道时才会发生这种情况。我总是打开几个 PuTTY 窗口,唯一崩溃的是打开端口隧道的窗口。

在最近一次崩溃之前,我打开了 PuTTY 日志,看看它说了什么。最后一行是“服务器发送命令退出状态 0”,这似乎很正常。

服务器退出状态 0

这是我的端口隧道设置的屏幕截图,以防相关:

港口隧道 D9090

这是 Windows 错误框,其中标识错误类型为“AppHangB1”:

在此处输入图片描述

Google 没有给我任何结果。搜索此类崩溃后,我发现这通常是由驱动程序错误引起的,所以如果有人知道我应该尝试更新/回滚什么,这是一个可能的途径。

我将 PuTTY 更新到最新版本,但没有任何效果。我还没有尝试更新远程计算机(由我控制)或路由器,但我希望它们都与这种崩溃无关,这种崩溃似乎与 Windows 本身有关。

Windows 7的


更新

我运行了建议的调试工具,它生成了内存转储并对其进行了分析。信息量很大,所以我粘贴到你可以在这里看到 jsfiddle。我在下面引用了摘要,但请参阅该页面以获取完整报告,因为它包含大量信息。

描述:在 putty.exe__PID__7768__Date__08_14_2018__Time_02_26_52PM__311__Manual Dump.dmp 中检测到可能阻塞或泄漏的临界区(位于线程 0 拥有的 0x041916d8 处)

该锁的影响:25.00% 的线程被阻止(线程 2)

以下函数正在尝试进入此临界区

mswsock!SockAsyncSelectCompletion+2a

以下模块与此关键部分有关:

目录:来自微软公司


三周后更新

已经将近一个月没有崩溃了,而在此期间又发布了一次 Windows 更新。时间太巧合了;我认为这一定是由夏天(可能是 7 月)的 Windows 更新引起的,并在 8 月的更新中修复了。

答案1

在PuTTY的配置设置中,“退出时关闭窗口”的设置可能会导致问题,因此尝试测试其其他可用设置。

您还可以尝试以下替代免费产品: 猫咪摩巴Xterm, 或者 Bitvise

如果其中一种替代方案对您有用,那么首先您有一个解决问题的方法。其次,问题本身可能是 PuTTY 与远程计算机的通信协议存在一些问题,您应该将问题报告给开发人员。

但是,如果这些替代方案都不适合您,那么问题可能不在您这边。您应该检查远程计算机上的 SSH 服务器设置,尝试调试它,并在此处发布跟踪日志(如果您希望我们查看)。如果您无法控制远程计算机,请将问题报告给其管理员。

答案2

PuTTY 在退出时崩溃并需要重新启动计算机

当程序试图退出时,PuTTY 会崩溃。当它崩溃时,窗口会冻结,无论如何都不会关闭。强制关闭不起作用,任务管理器不起作用。pstools 中的 pskill(使用管理员命令提示符)不起作用——它说进程已被终止,但它仍然存在。除了重新启动计算机外,没有什么能让窗口消失

我称之为“挂起”而不是“崩溃”。崩溃意味着执行继续要么返回一条错误消息(很好),要么在出现严重内存损坏的情况下会出现暂停(通常很短,有时有点长,很少是看门狗),然后执行会继续,并出现 BSOD 或重新启动(不太好)。

随着“挂”无论等待多久都不会让你进步但是,如果您的任务切换器不受影响并且可以切换到其他线程,则其他线程可能会继续正常运行。

很可能发生的事情是,PuTTY 生成了一个 VPN 子程序来建立隧道,并且进程出现问题;它还没有返回到PuTTY,所以PuTTY被挂起了。

另一个进程可能打开了临时文件或端口;终止PuTTY可能好吧,关闭子程序,但可能不会从子程序中删除任何文件或端口的锁。

如何确定- 到底是怎么回事?

阅读有关该错误的 Microsoft 社区网页,标题为:“Windows Explorer 7 没有响应 - “apphangb1 explorer.exe”错误“ 它说:

安德烈·齐格勒

创建 Windows 资源管理器的挂起转储:

http://www.msfn.org/board/topic/130005-creating-memory-dumps/

将崩溃转储压缩为 7z 或 RAR,然后将其上传到您的 SkyDrive,并在此处发布链接。

创建转储但您可以自己分析它,或者在所有 SE 站点搜索重复的问题后询问我们:“如何使用 .DMP 文件?”。

点击该链接进入网页:“创建内存转储“ 它说:

挂起(未崩溃)的应用程序/进程的内存转储:

  1. 创建名为 c:\adplus 的目录

  2. 打开命令提示符并转到安装调试工具的目录。默认情况下,此目录为“C:\Program Files\Debugging Tools for Windows”

  3. 在命令提示符中键入以下命令:

cscript adplus.vbs -hang -pn appname -quiet -o c:\adplus

(其中“appname”是挂起的应用程序的 .exe 名称)

  1. 一旦调试器完成(这可能需要一些时间),命令提示符窗口将关闭,并且您将在 C:\adplus 文件夹中获得可供分析的数据。

来自崩溃(未挂起)的应用程序/进程的内存转储:

  1. 创建名为 c:\adplus 的目录

  2. 打开命令提示符并转到安装调试工具的目录。默认情况下,此目录为“C:\Program Files\Debugging Tools for Windows”

  3. 在命令提示符中键入以下命令:

cscript adplus.vbs -crash -pn appname -quiet -o c:\adplus

(其中“appname”是崩溃的应用程序的 .exe 名称)

  1. 一旦您在步骤 3 中附加的应用程序最终崩溃,调试器将创建该进程的 .dmp 文件(或多个文件)。调试器完成后(这可能需要一些时间),命令提示符窗口将关闭,并且您将在 C:\adplus 文件夹中获得可以分析的数据。

请参阅此 Microsoft 支持网页:“调试诊断工具 v1.2 现已推出“其中描述了DebugDiag工具的用法。

它讨论了:

  • 生成内存转储:

    • 进程崩溃

    • 进程挂起或性能缓慢

要调试进程挂起或性能缓慢,请使用下列方法之一:

  1. 创建性能规则。性能规则可以基于性能计数器或 HTTP 响应时间。后者特定于 Web 服务器或基于 HTTP 的 Web 服务。性能计数器规则允许您在一个或多个性能计数器超过指定阈值时捕获一系列连续的用户转储。HTTP 响应时间规则允许您使用 ETW(特定于 IIS Web 服务器)或 WinHTTP(用于“ping”任何类型的 Web 服务器或基于 HTTP 的 Web 服务)在达到配置的超时时捕获用户转储。

  2. 通过右键单击进程视图中的进程名称并选择“创建转储系列”选项,在缓慢或挂起状态下创建手动内存转储系列。

    然后,使用 CrashHangAnalysis.asp 和/或 PerfAnalysis.asp 分析生成的 .dmp 文件(见下文)。

    • 内存或句柄使用情况
  • 分析内存转储:

    DebugDiag 最强大的功能之一是能够分析内存转储并生成显示分析结果的报告文件,以及解决已发现问题的建议。

    DebugDiag 使用“分析脚本”来分析内存转储。DebugDiag 1.2 附带了以下 5 个分析脚本:

    • 崩溃/挂起分析器 - CrashHangAnalysis.asp

    • 内存压力分析仪 - DotNetMemoryAnalysis-BETA.asp

    • 内存压力分析器 - MemoryAnalysis.asp

    • 性能分析器 - PerfAnalysis.asp

    • SharePoint 分析器 - SharePointAnalysis.asp”。

无论是什么问题,您都可以找到确切的位置并找出哪个进程出现故障并进行调试。如果您对这些工具的使用有疑问,请随时检查并提出新问题。

答案3

听起来您可能遇到了 winsock 过滤器的问题,并且您的应用程序因某种驱动程序/IO 问题而锁定。

在管理命令提示符中尝试:netsh winsock reset然后重新启动,看看是否有区别。

我想到了一些其他可以尝试的事情:

  • 删除所有未使用的 VPN 软件。

  • 卸载(并重新安装)网卡驱动程序。

  • 更新您的网卡驱动程序。

  • 如果您最近卸载了防病毒产品,则可能残留了网络过滤驱动程序。如果是这样,您可能需要找到相应安全产品的删除工具并运行它。

答案4

尝试运行两次扫描:

扫描 1

  1. 以管理员身份运行CMD
  2. 输入SFC /scannow并按 Enter 键
  3. 扫描完成后cbs.log打开%windir%\logs\cbs\cbs.log
  4. 查找cannot repair并复制未修复的文件。
  5. 找到未修复的文件(如果有)后,使用安装磁盘访问替换文件。请按照这些方向获取替换文件。

扫描 2(最后手段)

  1. 以管理员身份运行CMD
  2. 输入Chkdsk /f /r并按 Enter 键
  3. 您将看到一条有关要锁定卷的消息。按y然后输入。
  4. 重启你的电脑
  5. 扫描需要一段时间。等待扫描完成。
  6. 重新启动后,转到Event Viewer > Windows > Application Log然后查找Winninet
  7. 查看扫描结果。

我找到了答案Microsoft 社区

相关内容