我有一个基于MFC的应用程序。它会在几秒钟后继续查找文件(使用基于CreateTimerQueueTimer的计时器)并执行一些操作。这总是在XP上崩溃(原因不明)。这个应用程序在Windows 7和Windows 8上运行良好。但XP上的问题是持久的。
下面是调用堆栈,它没有显示任何帮助
反汇编截图如下:
EDIT1:
我改变了一些设置,我得到了这个新的调用堆栈。但仍然没有得到线索:
我不明白如何追踪崩溃的原因。是否有任何提示或任何方式来跟踪它从拆卸播种?或者系统的NTDLL.DLL文件可能有任何问题?欢迎任何帮助。
答案 0 :(得分:2)
分析堆栈后,我意识到定时器回调可能存在问题。我将我的计时器(createtimerqueuetimer函数)打包到一个等待线程,问题解决了。但仍有问题可以回答 为什么定时器回调在几次调用 后崩溃?我只是在30秒后设置并重置回调函数中的变量。所以我不怀疑任何指针相关的问题。
EDIT1:
最终我得到了答案。我需要改变
void MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
要:
VOID CALLBACK MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
问题与计时器回调功能有关。通常,CALLBACK和WINAPI被定义为stdcall,默认情况下,普通函数使用cdecl。