今天的一点调试KillTimer,发现的一点问题。
2010-04-13 14:03
218 查看
release版本没有断言错误发生。debug版本的总是有断言错误。
我还记得好像ASSERT对调试版有效,当发行版就无效。发行版要用的话,就需要用assert小写的才行。
幸亏断言就有提示文件名和位置,找到之后,前后调试了一下,找到了大概位置,
在公司的代码里面有
CGpsGUIDlg::~CGpsGUIDlg()
{
ceRasHangUp();
KillTimer(1);
KillTimer(2);
}
我发现在调用KillTimer的时候,实际上窗口句柄已经被销毁。
而在KillTimer函数里面要先断言窗口句柄,如果为空,就错误。
让后我再次调试找到调用销毁窗口函数的地方,在之前放置KillerTimer,
就不再出现断言错误。
下面是找到的一些资料。
我还记得好像ASSERT对调试版有效,当发行版就无效。发行版要用的话,就需要用assert小写的才行。
幸亏断言就有提示文件名和位置,找到之后,前后调试了一下,找到了大概位置,
在公司的代码里面有
CGpsGUIDlg::~CGpsGUIDlg()
{
ceRasHangUp();
KillTimer(1);
KillTimer(2);
}
我发现在调用KillTimer的时候,实际上窗口句柄已经被销毁。
而在KillTimer函数里面要先断言窗口句柄,如果为空,就错误。
让后我再次调试找到调用销毁窗口函数的地方,在之前放置KillerTimer,
就不再出现断言错误。
下面是找到的一些资料。
操作系统: Windows 编程工具: Microsoft Foundation Classes ASSERT() 问题: 什么是ASSERT()? ASSERT()和assert()的区别是什么?(Lilly) | |
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序: ...... ASSERT( n != 0); k = 10/ n; ...... ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。 assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。 |
相关文章推荐
- 今天发现了一点小问题(有关byte)
- 今天在看Head First 设计模式的时候发现了一点问题,可能是翻译的原因吧
- 今天在从装系统后在配置android开发环境的过程中遇到了一点小问题
- 今天清理C盘空间,发现Unity的一个问题
- 本人安装双系统时发现的一点小问题
- 今天发现CString的一个问题
- 今天看到有位兄弟把ajax library 反编译了 看来可以解决ajax调试无法找到源文件的问题了,刚刚才看到原来是引用了老赵的阿
- 今天工作中发现一个问题,看算不算BUG,如何解释这种现象。
- 今天自定义的block,用的时候发现了一个问题
- 今天学习asp.net mvc的过程中出现了一点问题,是有关浏览器的,一个疑问?
- 今天在开发一个组件的时候遇了一点IHttpHandler接口的问题
- 今天发现listings包的跨页问题(2014-3-26)
- 今天做Delphi控件包安装的时候发现一个问题Never-build package 解决方法
- 发现POPUP中的一点问题
- 软件调试修炼之道之——发现代码存在问题
- 再传一点今天的开发日志上来,主要是String和StringBuffer效率问题比较
- 用了这么久的hibernate 今天发现我还有这些问题太明白?
- 今天发现的关于gridview不显示内容的问题
- 在写rss阅读实现的blog的聚合,简单的聚合功能,发现的一点问题
- 今天发现了一个sql的小问题