有些时候为了便于调试,我们需要记录函数调用的堆栈信息。为此,封装了一个类StackDumper,在相应的函数中调用该类的成员函数即可。
stack_dumper.h
#ifndef STACK_DUMPER_H
#define STACK_DUMPER_H
#ifdef _WIN32
#include <windows.h>
#include <dbghelp.h>
#include <string>
#include <sstream>
#pragma comment (lib, "dbghelp.lib")
#endif // _WIN32
class StackDumper {
public:
StackDumper();
~StackDumper();
void Destory();
std::string DumpStack();
private:
#ifdef _WIN32
UINT max_name_length_; // Max length of symbols' name.
CONTEXT context_; // Store register addresses.
STACKFRAME64 stackframe_; // Call stack.
HANDLE process_, thread_; // Handle to current process & thread.
PSYMBOL_INFO symbol_; // Debugging symbol's information.
IMAGEHLP_LINE6