Poco:NestedDiagnosticContext
Poco::NestedDiagnosticContext
// Library: Foundation
结果
// 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; }
结果