概述
2.1 缘由
在程序开发调试过程中,很多时候我们都需要打印堆栈信息,来了解程序的某些部位的调用层次,这就需要我们打印堆栈信息了.MFC库中为我们提供了一个简单的打印堆栈信息的函数AfxDumpStack,但是这个函数仅仅能将打印信息输出到TRACE或者剪贴板.这不是我们需要的,我们需要的是将其打印到控制台,或者写入到日志中.
2.2 源码及说明
如下代码是一个头文件,用于打印堆栈信息.<文件:FADEFadeStackDumpStack.h>
/********************************
author:tanglx
date:2017/06/30
filename:DumpStack.h
describe:
********************************/
#ifndef _TANGLX_DUMPSTACK_
#define _TANGLX_DUMPSTACK_
#include "atlutil.h"
void DumpStack(){
//nested class
class MyDumpStackHandler : public IStackDumpHandler
{
void __stdcall OnBegin(){
printf("Beginrn");
}
void __stdcall OnEntry(void *pvAddress, LPCSTR szModule, LPCSTR szSymbol){
printf("%xt",pvAddress);
if (szModule){
printf("%s:%srn",szModule,szSymbol);
}
}
void __stdcall OnError(LPCSTR szError){
printf("errorrn");
}
void __stdcall OnEnd(){
printf("endrn");
}
};
//只构造该对象一次
static MyDumpStackHandler MyHandler;
AtlDumpStack(&MyHandler);
}
#endif
这里,使用了AtlDumpStack,说明我们使用的这个函数是依赖于ATL库的.
其中Nested class MyDumpStackHandler 派生于IStackDumpHandler,而IStackDumpHandler是ATL库提供给我们用于打印堆栈信息的接口, IStackDumpHandler源码如下:
__interface IStackDumpHandler
{
public:
void __stdcall OnBegin();
void __stdcall OnEntry(void *pvAddress, LPCSTR szModule, LPCSTR szSymbol);
void __stdcall OnError(LPCSTR szError);
void __stdcall OnEnd();
};
这样,我们只需要实现如上所示的4个接口就可以控制堆栈信息的打印了.
2.3 小结
感觉也没啥好小结的,有兴趣的朋友可以去跟一下AtlDumpStack的源码.
另外,我们的MyDumpStackHandler类使用的是printf,结合我们第一节说的打印信息,我们可以方便快捷的将堆栈信息输出到控制台或者日志.
最后
以上就是怕孤独诺言为你收集整理的2 输出堆栈信息的全部内容,希望文章能够帮你解决2 输出堆栈信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复