c编写了一个程序,在两台终端间进行socket通信,程序里面包括较多的多线程和socket处理,这个程序支持控制台方式双击运行,也支持以服务程序的方式后台启动,同时这个程序在内部处理过程中需要调用到第三方提供的一个DLL动态库,在调试过程中为了压力测试,设置了会话寿命,每隔30秒,两台终端间就会重新建立socket连接。
当两台终端都是winxp(sp3)时,不管是用控制台方式还是服务方式启动,运行起来都没有问题。
但是当一台终端是winxp(sp3),一台终端是winxp(sp2)时,该程序在sp2机器上运行时,以控制台方式启动运行正常,但当以服务方式运行的时候,第一次建立socket连接时没有问题,30秒寿命一过,第二次重连时,程序就崩溃,弹出的错误窗口中说调用的那个第三方动态库中读取了非法地址。
目前可以肯定的是第三方动态库肯定没有问题,但不知道我的程序是怎样触发这个问题的。
尝试用windbg附加到进程中去调试,可是程序崩溃的时候windbg显示的调用堆栈信息已经是在第三方动态库里面了,貌似跟我的程序无关了。。。。
张老师能不能给提供一点分析解决的思路?