【问题标题】:Is it possible to find the stack depth of a C function, using Visual Studio 2013 Express for Windows?是否可以使用 Visual Studio 2013 Express for Windows 找到 C 函数的堆栈深度?
【发布时间】:2016-03-17 12:32:01
【问题描述】:
下午好,
我正在用 C 语言开发一个程序,其中(出于调试目的)我经常添加如下行:
printf("[%s]\n", __FUNCTION__);
我想在这些注释行前面加上一些空格(或点),作为我的函数的堆栈深度,以便我可以轻松确定哪个函数正在调用另一个函数。
我在 Windows-7 系统上使用 Visual Studio 2013 Express for Windows。
据我所知,我没有使用 gcc 编译器。
这可能吗?
谢谢
【问题讨论】:
标签:
c
visual-studio
visual-studio-2013
stack
【解决方案1】:
如果有人发现添加尾随的更快/更简单的方法
空白,不要犹豫做出反应。
你的意思是前导个空格。您可以在* 中使用字段宽度参数:
printf("%*c[%s]\n", frames+1, ' ', __FUNCTION__);
【解决方案2】:
非常感谢@SergeyA,
我已遵循您 URL (https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx) 中的指南,现在我提出了以下解决方案(根据 Armali 的评论进行了编辑):
#include "DbgHelp.h"
void *stack[ 100 ];
unsigned short frames;
HANDLE process;
process = GetCurrentProcess();
SymInitialize( process, NULL, TRUE );
frames = CaptureStackBackTrace( 0, 100, stack, NULL );
printf("%*c[%s]\n", frames+1, ' ', __FUNCTION__);
(如果有人发现添加前导空格的更快/更简单的方法,请不要犹豫做出反应。)