【问题】
我们的代码,C++写的一个软件,其中一个对象有HANDLE类型的成员变量m_hSemaphore。
该变量一开始都能正常WaitForSingleObject(),但运行一段时间后,发现WaitForSingleObject会出错,Errno=6,也就是句柄无效。
注:
1. 这个过程中,我没有主动关闭句柄,对象本身也没被释放。
2. 有时也发现在头文件中声明m_hSemaphore的附近的其他句柄也会失效。比如下面:
HANDLE m_hMutex; //也可能会失效
HANDLE m_hSemaphore;
【本人推测】
可能是内存越界了,由于代码量比较大,没法一一核实。
【期望的解决方法】
Step1. 在对象被生成后,监视HANDLE m_hSemaphore所在上下文的内存,有类似的回调函数可用么?
(Windows写内存的底层函数是什么,可以被hook么?)
Step2. 如果Step1可行,能获取到是哪个函数修改的么?
【其它】
即使不用是上述方法,如果能给出其它建议,是受欢迎的;
包括对症状本身的分析,也是欢迎的。