mfc140ud.dll 中的调试断言失败
Posted
技术标签:
【中文标题】mfc140ud.dll 中的调试断言失败【英文标题】:Debug Assertion Failed in mfc140ud.dll 【发布时间】:2016-05-02 15:52:36 【问题描述】:当我创建一个新对话并在其上调用 DoModel 时。我收到以下调试断言。
代码是
if (m_pWatchDogDialog->WatchDogServer().CurrentUserStatus() == CServerLink::AWAY)
CString msg("Requested user is away");
m_pWatchDogDialog->WatchDogServer().SendUserMessage(m_UserKey, msg);
else
AcceptFile *dlg = new AcceptFile();
dlg->DoModal(); // error is throwing up here
报错如下图
The Assertion is at the debug point as shown in image in dlgcore.cpp file
【问题讨论】:
当你点击Retry
时,会发生什么?你应该已经被带到了运行时库中调用断言的那一行。
@PaulMcKenzie:afxwin1.inl 是 MFC 实现的一部分,而不是运行时。除此之外,是的,显然单击重试,正如断言对话框所暗示的那样……不要再无助了。此外,您应该为 AcceptFile
对象使用自动存储持续时间。没有理由new
它,除非你想训练你的内存泄漏调试技能。此外,不要忽略应用程序终止时的调试输出。它在告诉你,你正在泄漏内存。
按照建议,我将我的代码更改为 AcceptFile 对象的自动存储,但我再次遇到同样的错误
@AjithKumar。 1:点击Retry
,它将在mfc库上出现问题的位置进入调试器。检查该代码可能会提示您正在发生什么。在图像的断点处,dlgcode.cpp 中没有断言。 2:向我们展示更多您的代码。
@AjithKumar 这是一个什么样的项目?这个对话框在 DLL 中吗?
【参考方案1】:
假设 AcceptFile 继承自 CDialog,您可能可以通过扩展 AcceptFile 构造函数并使用 lpszTemplateName 参数调用 CDialog 构造函数来阻止调试断言。例如:
class AcceptFile : public CDialog
public:
AcceptFile(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL)
: CDialog(lpszTemplateName, pParentWnd)
// your code here
// other stuff
;
【讨论】:
以上是关于mfc140ud.dll 中的调试断言失败的主要内容,如果未能解决你的问题,请参考以下文章
对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel
在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败
在类构造函数中使用 MFC 按钮控件 EnableWindow 方法时“调试断言失败”
加载 MFC 视图时在 \$InstallDir\VC\atlmfc\src\mfc\appgui3.cpp 上调试断言失败,第 385 行