打印函数调用堆栈

入职腾讯以来,天天都很忙。今天难得清闲,借此机会记录一下前段时间搞的一个小功能,打印函数的调用堆栈。

什么是函数的调用堆栈?给你看一段代码你马上就明白了。
在这里插入图片描述
比如我在DecideAllTaskID中调用A,那么打log之后我们就可以看到LogBacktrace的堆栈回溯结果了。

在这里插入图片描述
以上就是堆栈回溯的结果了,前面两个null可能是符号表中没有找到符号。

话不多说,直接上堆栈回溯的代码:

extern "C"
{
   
	struct BacktraceState
	{
   
		void** current;
		void** end;
	};

	static _Unwind_Reason_Code UnwindCallback(struct _Unwind_Context* context, void* arg)
	{
   
		BacktraceState* state = static_cast<BacktraceState*>(arg);
		uintptr_t pc = _Unwind_GetIP(context);
		if (pc)
		{
   
			if (state->current == state->end)
			{
   
				return _URC_END_OF_STACK;
			}
			else
			{
   
				*state->current++ = reinterpret_cast<void*>(pc);
			}
		}
		return _URC_NO_REASON;
	}

	static size_t CaptureBacktrace(void** buffer, size_t max)
	{
   
		Backtr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值