我的程序被谁干掉了?

2021-08-06 14:58:39 浏览数 (1)

终端产品一般部署在客户的环境中,那么奇奇怪怪的问题也就容易出现了。比如Windows产品进程为什么忽然停止了?这个时候稍微有些经验的程序员会做出以下判断:

  1. 中型的产品中,代码比较复杂。是不是程序中有什么退出逻辑,没有注意到?
  2. 是不是程序崩溃了,比如资源不足或者代码bug?
  3. 是不是系统中的其他程序关闭了我们的进程?比如客户的脚本或者其他的软件。

是不是程序中有什么退出逻辑,没有注意到?

常见的程序退出的时候会有Log记录,这种情况一般通过Debug Log 结合代码审查可以进行追踪。

是不是程序崩溃了,比如资源不足或者代码bug?

如果你的程序是一个Windows服务,也许可以先看看Windows Event。当然如果是Crash,最好的方式还是通过收集dump来进行确认,可以参考我之前写过的一篇文章<<Windows程序Dump收集>>,然后再通过Windbg进行分析,可以参考<<Windbg分析程序崩溃实践>>,从而定位问题。

是不是系统中的其他程序关闭了我们的进程?

这个看似是最难查找的了,用户环境纷繁复杂。但是Windows调试工具集中的gflags可以满足我们的需求。 第一步 先使用gflags设置需要监视的进程如下图所示, 并且开启Enable Silent Process Exit Monitoring

第二步 故意kill这个进程notepad.exe,可以手动通过任务管理或者windows调试工具集中的kill.exe第三步 查看Windows Event,在应用程序事件中可以查看到是谁把你的进程给kill掉了。(下图来自于:MSDN https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/registry-entries-for-silent-process-exit)

参考

0 人点赞