[转]如何快速定位一个函数的返回点 - 调试技巧

来源:互联网 发布:山寨币程序员开发 编辑:程序博客网 时间:2024/05/22 02:22

转自:http://www.cnblogs.com/baiyanhuang/archive/2009/09/01/1557890.html#commentform

我截取原文一部分,并稍做了改动,如下:

方法1:(宏定义替换return)
A:对于MFC工程
#define return TRACE(__LINE__); return

B:控制台工程
#define return std::cout<<"line: "<<__LINE__<<std::endl; return

方法2:(利用函数返回时析构栈上变量的特性)

  • 返回时析构
    class ReturnMonitor{ ~ReturnMonitor(){} };
    struct LongFunction()
    {
        ReturnMonitor mon;
        
    // Function body
    }

    在资源管理中我们经常会用这种方式(RAII),现在我们利用函数返回时会调用析构函数这个特性,在析构函数中设断点,就能在callstack中看到返回点。这还有一个优点就是在LongFunction调用过程中如果出现异常,也能被捕捉。
  •   第二个是“返回时析构”,我们可以定义以下宏:

    #ifdef _DEBUG
    #define RETURN_MONITOR ReturnMonitor mon;
    #else
    #define RETURN_MONITOR
    #endif

    这样对于我们代码中比较长的,较难调试的长函数,就可以在函数开始加上RETURN_MONITOR,并且不影响release版本。


    原创粉丝点击