我是靠谱客的博主 怕孤独诺言,最近开发中收集的这篇文章主要介绍2 输出堆栈信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 输出堆栈信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部