Poco::NestedDiagnosticContext

来源:互联网 发布:大码女装淘宝店 编辑:程序博客网 时间:2024/04/28 16:05
// Library: Foundation

// Package: Core

// Module:  NestedDiagnosticContext

// Namespace: Poco

//功能:对函数调用栈进行跟踪,调试时,可以将调用栈信息tag到日志里,前提是,你在代码中加入了poco_ndc(func)或poco_ndc_dbg(func)这两个宏的调用。

public方法

  • void dump(std::ostream& ostr) const;
  • static NestedDiagnosticContext& current();
  • poco_ndc(func) or poco_ndc_dbg(func)

dump

将栈信息输出到ostr流中,每行一个函数信息。输出信息格式见下面的图。

current

得到当前线程的NestedDiagnosticContext对象(简称NCD对象)。Poco库已经预先为每个线程定义了一个NCD对象,且是线程安全的,所以,直接调用current方法,就可得到对当前线程NCD对象的引用。

poco_ndc(func)

这是个宏,定义宏是为了减少代码量,对内部的push,pop等方法进行封装。我们只需要在每个函数定义的开始地方,调用poco_ndc(函数名),就可以对函数调用栈进行跟踪。

poco_ndc_dbg和poco_ndc的功能一样,如果不定义_DEBUG宏的话,


代码实例

#include "Poco/NestedDiagnosticContext.h"#include <iostream> void f1(){    poco_ndc(f1);    // 也可以调用poco_ndc_dbg    Poco::NDC::current().dump(std::cout);  //current获取当前NDC的引用,dump输出到cout}void f2(){    poco_ndc(f2);    f1();}int main(){    poco_ndc(main);    f2();    return 0;}

结果


原创粉丝点击