程序里经常放很多ASSERT,这样调试会很方便。以前很反感这个东西,觉得占用行数而且又很无谓(无知啊),但现在是很喜欢,动不动就来个ASSERT,有点过火了,哈哈。
    如果ASSERT是放在一个函数里,当程序运行出错时弹个对话框给予提醒,但却令人一头雾水,到底是谁调用此函数导致出错呢?如果VC有个功能告诉我ASSERT出错之到底执行了什么代码那该多好啊。
    以往我常常是从程序开头设置多几个可以断点,一步一步调试,缩小出错范围直到找到导致这个ASSERT的地方。但很烦,有时甚至不知如何下手。就知道出错在哪一行,可又查不出原因,很无奈。
    今天突然有个想法。我们为什么不可以在ASSERT代码之前加个if判断,在if体内直接return(return要设置断点)。这样就可以马上知道是谁调用了此函数了。比如函数:
void func(int k)
{
ASSERT(k!=0); int a=4;
//其它代码
}现在我们知道ASSERT(k!=0);出错了。那我们改成:void func(int k)
{
//判断形式为 if(!( X ))   《 X 为ASSERT()里面的表达式》
if (!(k!=0))
{
//return添加断点,调试到这里函数返回就可以
//跟踪到是谁调用了此函数。
/*设置断点*/ return;
} ASSERT(k!=0); int a=4;
//其它代码
}当k==0 时程序跳到return,再按step over 很快就可以跳出函数体并且跟踪到是谁调用此函数导致出错了。以上是一点心得,愿和大家分享。如果大家有更好的方法,请多多指教,谢谢!

解决方案 »

  1.   

    顶个LZ,我个人也比较喜欢ASSERT保护
      

  2.   

    感谢楼主分享,我也不常使用Assert()没有领会其中的精髓。。
      

  3.   

    个人对Assert用的比较少。
    一般是调用堆栈
      

  4.   

    哈哈~没有嘲笑楼主的意思,不过我看了之后真的笑了~大家多交流
    可以按<Alt+7>
      

  5.   

    兄弟,你说的Alt+7什么意思啊。那只是选项而已啊!