admin 管理员组

文章数量: 887021

这两天改了一个socket转发程序,并做成了Windows服务,在IDE里面调试的时候,好好的,运行什么的都很稳定,但是,安装成Windows服务后,运行很快就崩溃了。

通过命令行运行,错误的信息为:服务由于未知的错误停止或未能启动,错误代码:1067.若干次都是这样。

通过查看Windows的系统信息,查看Windows应用程序日志,相关的错误信息:

日志名称:          Application
来源:            Application Error
日期:            2015-11-05 16:39:53
事件 ID:         1000
任务类别:          (100)
级别:            错误
关键字:           经典
用户:            暂缺
计算机:           
描述:
错误应用程序名称: .exe,版本: 1.0.0.1,时间戳: 0x563b157b
错误模块名称: ntdll.dll,版本: 6.1.7601.17514,时间戳: 0x4ce7ba58
异常代码: 0xc0000008
错误偏移量: 0x00082865
错误进程 ID: 0x1258
错误应用程序启动时间: 0x01d117a58a23fabf
错误应用程序路径: 
错误模块路径: C:\windows\SysWOW64\ntdll.dll
报告 ID: c82a4f59-8398-11e5-afcb-ecf4bb702d97
事件 Xml:

ntdll.dll是Windows NT内核的一个核心动态链接库。这个库出的问题,其实很大的原因可能怀疑是不是把系统搞崩溃了。


但是,可能Windows没有想象的那么糟糕,这个Windows的产生是由于我代码中变量未初始化造成的,这个变量还是个临界区。这个变量是动态分配的空间,然后分配完了,当时忘记初始化了,之后再调试的时候,使用IDE在debug和Release的情况下都能正常运行,但是做成服务,安装到Windows系统中之后,一运行就崩溃了。若干次。后来问题排查,将此变量初始化之后,就OK了。


总结:程序中的变量一定要在使用之前进行初始化,否者出现了莫名其妙的崩溃,你都不知道是哪里出的错误。

这半天的调试,也知道了,调试代码一定不能心急,但是也不能盲目,想无头苍蝇一样,自己的看错误的信息,自己的检查代码,会大大提高效率。

本文标签: 错误 系统 Windows