【问题标题】: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__);
    

    (如果有人发现添加前导空格的更快/更简单的方法,请不要犹豫做出反应。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多