【问题标题】:MFC application Crashes in NTDLL.dllMFC 应用程序在 NTDLL.dll 中崩溃
【发布时间】:2015-09-02 18:04:56
【问题描述】:

我有一个基于 MFC 的应用程序。它会在几秒钟后继续寻找文件(使用基于 CreateTimerQueueTimer 的计时器)并执行一些操作。这总是在 XP 上崩溃(原因不明)。此应用程序在 Windows 7 和 Windows 8 上运行良好。但 XP 上的问题仍然存在。

下面是没有显示任何帮助的调用堆栈

反汇编截图如下:

EDIT1:

我更改了一些设置并获得了这个新的调用堆栈。但仍然没有得到线索。:

我不明白如何找出崩溃的原因。是否有任何提示或任何方法可以跟踪从拆卸中播下的内容?还是系统的 NTDLL.DLL 文件有问题?欢迎任何帮助。

【问题讨论】:

  • 该堆栈跟踪缺少重要部分。您需要说服 Visual Studio 为您的可执行文件加载调试符号。
  • 这就是问题所在。我的意思是仅针对此问题,它提供如上所示的调用堆栈。这就是为什么我无法抓住罪魁祸首。你知道我怎样才能让 Visual Studio 调试器给我那个吗?
  • 应用程序是否使用调试符号构建?如果是这样,您应该能够在项目属性中指定符号的位置。
  • 嗯,我可以看到我的调试信息格式设置为 /ZI 。我还需要做什么吗?
  • 您是否在 XP 机器上运行 Visual Studio?还是你在远程调试呢?或者您正在调试转储文件?加载符号可能取决于这些问题的答案。同时,尝试将 .PDB 文件放在 .EXE 文件旁边。

标签: windows mfc crash ntdll


【解决方案1】:

分析堆栈后,我意识到定时器回调可能有问题。我将我的计时器(createtimerqueuetimer 函数)更改为等待线程,问题就解决了。但是对于为什么定时器回调在几次调用后崩溃仍有待回答?我只是在 30 秒后设置和重置回调函数中的变量。所以我不怀疑任何与指针相关的问题。

EDIT1:

我终于得到了答案。我需要改变

void MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)

收件人:

VOID CALLBACK MyTimerCallbackRoutine(PVOID lpParameter, BOOLEAN TimerOrWaitFired)

问题与定时器回调函数有关。通常,CALLBACK 和 WINAPI 被定义为 stdcall,而普通函数默认使用 cdecl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多