调试实战之数据断点

原创 2004年09月14日 18:49:00
       上午师弟遇到了一个问题,他用动态链接库实现了一个对话框,这个对话框包含了vc的Grid控件,结果用测试程序测试时,对话框始终弹不出来!去掉Grid控件后就运行正常了!下面是DLL中导出对话框的函数:

void GEOADD_EXPORT DataGrid(CWnd *pWnd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());//(1)
CDataGridDlg dlg;
dlg.DoModal();(2)
}
      (1)已经加上了,就不是它没有加的问题了。从(2)跟进去。发现在BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,CWnd* pParentWnd, HINSTANCE hInst)函数中的片断:
if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
{
:DestroyWindow(hWnd);
hWnd = NULL;
}
       程序会运行这个片断,从而销毁了对话框!对话框在这里被干掉了!查看这个条件语句,hwnd是肯定不为空的,有问题就是m_nFlags了。它等于WF_OLECTLCONTAINER,这个值好像不对!往前面看,发现在 hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProc);中改变了吗m_nFlags。在哪里呢?m_nFlags是成员变量,它在初始化后地址就不会改变。这样就方便了我们设置数据断点。在Watch窗口输入:&m_nFlags 得到它的内存地址,依次点击Edit->Breakpoints->Data,在上面的文本框中输入:*((int*)0x1111111),0x1111111是你刚才得到的内存地址,当程序试图改变m_nFlags,就会断掉了!找到出现问题的语句!AFX_STATIC HRESULT AFXAPI _AfxCoCreateInstanceLic(REFCLSID clsid, LPUNKNOWN pUnkOuter,DWORD dwClsCtx, REFIID iid, LPVOID* ppv, BSTR bstrLicKey)中的:
if (SUCCEEDED(hr = CoGetClassObject(clsid, dwClsCtx, NULL,
IID_IClassFactory, (void**)&pClassFactory)))
{
ASSERT(pClassFactory != NULL);
hr = pClassFactory->CreateInstance(pUnkOuter, iid, ppv);
pClassFactory->Release();
}

CoGetClassObject失败,返回hr等于0x800401F0.开动msdn查了一下,说是CoInitialize(),没有调用。加上,解决了!!
       另外输出窗口输出信息不太符合,他说控件没有注册!看来也不能完全相信mfc的输出!

VS2015使用小技巧 断点调试

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 断点调试要配合逐语句调试或者逐过程调试。 设置断点调试行: ...
  • yushaopu
  • yushaopu
  • 2016年08月29日 12:33
  • 14748

xcode调试之断点调试及动态输出

在开发App的过程中,需要反复的修改和优化我们的代码,特别是当程序出现bug,需要快速的找出错误的原因,进行修改,以保证程序的正确执行。 断点调试,是最常用最简单的一种调试方式,可以一步步跟踪程序执行...
  • LXL_815520
  • LXL_815520
  • 2016年07月28日 15:57
  • 2770

调试技巧(断点调试的各种技巧,让你调试程序更得心应手)

断点的源由:   INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常。程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中...
  • raiven2008
  • raiven2008
  • 2015年04月18日 13:27
  • 1825

AS断点调试与高级调试(二)

Android Studio调试功能使用总结【转】 来源:Jy_z阅读:249 时间:2016-05-05 17:12 分享:0 window._bd_share_config = { ...
  • bailangsyc
  • bailangsyc
  • 2017年03月02日 20:16
  • 961

Unity使用MonoDevelop进行断点调试

即用MonoDevelop进行断点调试。本次记录是使用的Unity5.4.0版本
  • ksgt00629518
  • ksgt00629518
  • 2016年12月05日 21:59
  • 1877

VS2010 旗舰版 MFC开发 调试断点无效的解决办法

问题:          在VS2010的其中一个cpp里设置断点,但是在调试运行时无效,不能进入断点...
  • limingmcu
  • limingmcu
  • 2014年04月15日 17:10
  • 2789

VS结合浏览器调试,无法进入断点

转载自http://www.cnblogs.com/lidabo/archive/2012/08/08/2627956.html     由于有一个bug是在非ie浏览器上出现问题的,因此调试时不能使...
  • aixh0505
  • aixh0505
  • 2017年04月10日 14:48
  • 372

VS2010 调试中断点突然失效的解决办法

问题描述:在调试前加了断点,但debug时红色的断点变成透明的圆圈加一个感叹号,执行到该处时也不会停止。 这个问题遇到过几次了,前几次都没怎么注意,有时候是因为复制粘贴了某段代码后就这样了,然后点击...
  • hongxingabc
  • hongxingabc
  • 2016年04月17日 22:32
  • 1520

如何在ARM Linux内核中使用硬件断点

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • lingxf
  • lingxf
  • 2016年03月27日 22:57
  • 1218

调试dll,断点不进入的解决方法

把调用程序项目也加入dll项目的同一个解决方案中,这样生成的exe 和dll都在同一个目录中 dll项目属性-dubugging-command中写入exe程序的全路径。只写calldll.exe这...
  • wletv
  • wletv
  • 2011年09月08日 10:58
  • 3076
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调试实战之数据断点
举报原因:
原因补充:

(最多只允许输入30个字)