Delphi在debug过程死机怎么办?!
1、怎样的调试场景?
1.1、大容量硬盘的某个路径下存在大量的文件,调用TOpenDialog文件选择框
1.2、由于代码bug造成大量后台线程运行过程中,本机文件流读写状态不正确造成“死锁”及线程永久挂起
1.3、其它有可能被您遇到的类似情形。
2、“假死机”不能得到解决的“后果”
2.1、退出不了“调试器”
2.2、只能“冷启动”计算机,即硬件电源开关重启;启动后将可能造成当初debug“写锁死”的硬盘“写保护”,只能chkdisk调用操作系统命令来“扫描和纠错”,这个过程太漫长了,至少2个小时。
3、“假死机”原因
3.1、关掉360safe.exe的自我保护。
若你关不掉,简单方法就是临时先卸载360安全卫士。
3.2、总结一句话:(任务管理器)编译器后台程序DelphiLSP.exe、bds.exe及其被调试的App三者之间互为子进程。
4、“假死机”解决办法及过程
强制终止Delphi编译器Debug时DelphiLSP.exe(PID 11785)、bds.exe(PID 37756)及其被调试的App(PID 9768)
这3者之是有依存关系的:
C:\Users\Administrator>
taskkill /T /PID 37756 /U Administrator /P Admin81919048 /S localhost
成功: 给进程发送了终止信号,进程的 PID 为 37756,是 PID 9768 的子项。
C:\Users\Administrator>
taskkill /T /PID 9768 /U Administrator /P Admin81919048 /S localhost
错误: 无法终止 PID 11980 (属于 PID 11604 子进程)的进程。
原因: 只能强行终止这个进程(带 /F 选项)。
错误: 无法终止 PID 9352 (属于 PID 11604 子进程)的进程。
原因: 只能强行终止这个进程(带 /F 选项)。
错误: 无法终止 PID 11604 (属于 PID 9768 子进程)的进程。
原因: 一个或多个此进程的子进程仍然在运行。
成功: 给进程发送了终止信号,进程的 PID 为 37756,是 PID 9768 的子项。
错误: 无法终止 PID 9768 (属于 PID 4104 子进程)的进程。
原因: 一个或多个此进程的子进程仍然在运行。
4.1、先终止DelphiLSP.exe网络语言调试器:
taskkill /T /PID 37756 /U Administrator /P Admin81919048 /S localhost
成功: 给进程发送了终止信号,进程的 PID 为 37756,是 PID 11785 的子项。
4.2、再终止bds.exe
taskkill /T /PID 37756 /U Administrator /P Admin81919048 /S localhost
成功: 给进程发送了终止信号,进程的 PID 为 37756,是 PID 9768 的子项。
是 PID 9768 的子项-------------即被调试的App的pid
4.3、再终止被调试的App的pid
taskkill /T /PID 9768 /U Administrator /P Admin81919048 /S localhost
成功: 给进程发送了终止信号,进程的 PID 为 9768,是 PID 37756 的子项。
------------bds.exe及其调试的App互为子进程----------它们之间的进程不可见PID 4104
taskkill /T /PID 4104 /U Administrator /P Admin81919048 /S localhost
错误: 没有找到进程 "4104"。
4.4、taskkill /PID 4104 /PID 9768 /PID 37756 /T
成功: 给进程发送了终止信号,进程的 PID 为 37756,是 PID 9768 的子项。
错误: 无法终止 PID 9768 (属于 PID 4104 子进程)的进程。
原因: 配额不足,无法处理此命令。
错误: 没有找到进程 "4104"。
4.5、怎么办?!------------------加 /F强制终止进程:
taskkill /PID 4104 /PID 9768 /PID 37756 /T /F