后台服务程序,service 方式
开启服务,没有任何问题
长时间运行也没有问题
退出的时候,偶尔会发生问题,注意是偶尔
使用日志监控,发现主服务线程成功结束,然后释放内存等也全部成功结束
最后返回MAIN函数,日志记录到也是成功结束
可以偶尔会发生错误,发生错误时日志也可以看到所有的结束动作都是成功的
也就是已经到了MAIN( )函数的RETURN部分了
接下去是一些类的自我释放,这个无法监控到了
但是同样的类,用在另外一个程序中,无任何问题,测试中也没有问题
怪了
怪还怪在服务结束后大约3-5秒,系统才弹出错误提示框,
内容类似
Server=watson.microsoft.com
UI LCID=2052
Flags=1674066
Brand=WINDOWS
TitleName=XXXXXXX.exe
DigPidRegPath=HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId
ErrorText=如果您正执行到一半,您的未保存的信息可能会丢失。我的监控日志可以记录到已经执行到MAIN( )返回了
2007 04-12 12:49:53 A and U thread exit ok
2007 04-12 12:49:53 Free user data ok
2007 04-12 12:49:53 Free thread memory ok
2007 04-12 12:49:53 End Memory Pool ok
2007 04-12 12:49:53 Flush memory log ok
2007 04-12 12:49:53 My service of xxxxxxx exit ok! *
2007 04-12 12:49:53 --------Stop myservice successfully done--------
2007 04-12 12:49:53 Service main: success waiting for thread end , now to close handle
2007 04-12 12:49:53 Server stop: Now to End Tcp
2007 04-12 12:49:56 Server stop: Now to Call CoUninitialize
2007 04-12 12:49:56 ----XXXXXXXX service now exit successfully----注意,这个错误不是每次都发生,是偶尔发生
开启服务,没有任何问题
长时间运行也没有问题
退出的时候,偶尔会发生问题,注意是偶尔
使用日志监控,发现主服务线程成功结束,然后释放内存等也全部成功结束
最后返回MAIN函数,日志记录到也是成功结束
可以偶尔会发生错误,发生错误时日志也可以看到所有的结束动作都是成功的
也就是已经到了MAIN( )函数的RETURN部分了
接下去是一些类的自我释放,这个无法监控到了
但是同样的类,用在另外一个程序中,无任何问题,测试中也没有问题
怪了
怪还怪在服务结束后大约3-5秒,系统才弹出错误提示框,
内容类似
Server=watson.microsoft.com
UI LCID=2052
Flags=1674066
Brand=WINDOWS
TitleName=XXXXXXX.exe
DigPidRegPath=HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId
ErrorText=如果您正执行到一半,您的未保存的信息可能会丢失。我的监控日志可以记录到已经执行到MAIN( )返回了
2007 04-12 12:49:53 A and U thread exit ok
2007 04-12 12:49:53 Free user data ok
2007 04-12 12:49:53 Free thread memory ok
2007 04-12 12:49:53 End Memory Pool ok
2007 04-12 12:49:53 Flush memory log ok
2007 04-12 12:49:53 My service of xxxxxxx exit ok! *
2007 04-12 12:49:53 --------Stop myservice successfully done--------
2007 04-12 12:49:53 Service main: success waiting for thread end , now to close handle
2007 04-12 12:49:53 Server stop: Now to End Tcp
2007 04-12 12:49:56 Server stop: Now to Call CoUninitialize
2007 04-12 12:49:56 ----XXXXXXXX service now exit successfully----注意,这个错误不是每次都发生,是偶尔发生
但是能监控的地方我都监控到,而且都是正确的
我看网上有人说是杀毒软件的监控模块引起类似问题,不知道是不是
因为发生错误的时候我已经监控到MAIN( )函数成功返回了,接下来是堆栈的释放,我无法监控了
哎,真头大
运行出问题还好,TMD都主程序退出了还出问题
2007 04-12 15:49:40 Error context code: 65599 : 1003F
2007 04-12 15:49:40 Error exception code :3221225477 : C0000005
2007 04-12 15:49:40 Error exception Flags: 0 : 0
2007 04-12 15:49:40 Error exception NumberParameters: 2 : 2
2007 04-12 15:49:40 GetLastError: 2 : 2
这是我用自己的异常处理函数捕获的
内存读写冲突
可看日志记录,MAIN已经返回了
我已经通过日志+ATTACH+COMMAND LINE 联合比对,定位到异常所在了
目前暂时判断是线程退出的时候不同步,有一个关键变量提前被销毁了
服务进程真TMD难调试
而且new和delete全部重载,delete的时候发现提早销毁也全部记录日志
所有的互斥都自己包装一个类, 对已经销毁的对象操作的时候也记录日志......当然,以上都是在#define中有定义一个_DEBUG_SERVICE, 取消掉这个定义就和普通代码一样了希望对你有帮助
和线程内部代码的异常没有直接关系,是退出顺序错了
我没彻底理解ServiceMain的作用
因为我是用API直接写的
这里就有个MAIN( )函数的执行转移问题
我理解错了,因此退出的时候没有考虑到顺序,目前定位到的异常就是这里
我全局有TRY CATCH结构的,异常处理函数也自己写的
但是在我这里没有用,因为这里很特殊,明天继续调试,应该就是这里的问题了加Try catch代码效率有点问题,如果内部代码真有问题,还是直接让它报告错误的好
在服务器软件里,带错运行比较可怕
确实是我理解问题,
不过这里的MAIN()和全局变量的关系实在令人费解
还好最后解决掉了