解释Visual Studio中的调用堆栈输出

时间:2014-09-29 10:54:11

标签: visual-studio debugging

系统信息:Windows 7,MSVS 2010

以下是一个简单的程序,我正在测试调试中的Call Stack选项如何工作

#include<stdio.h>
#include "stdafx.h"


int main()
{
    printf("hello"); //breakpoint 
}

当我调试控件击中断点时,调用堆栈是:

testapp.exe!main()  Line 10 C++
testapp.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes  C
testapp.exe!mainCRTStartup()  Line 371  C
kernel32.dll!75e7ed6c()     
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  
    ntdll.dll!77a537eb()    
    ntdll.dll!77a537be()    

我如何解释这个结果?广告是什么__tmainCRTStartup()

更新

刚检查,调用堆栈中的输出相同,即使我有.c文件而不是.cpp文件。

1 个答案:

答案 0 :(得分:0)

调用堆栈用于确定调试器当前所在的代码行。最上面的是当前位置。

在您的示例中,相关行是testapp.exe!main() Line 10 C++,这意味着它停在了一个名为main()的函数中,该函数位于文件的第10行。通常这也包含文件名。

将此代码粘贴到您的文件中,看看在您休息时调用堆栈是否对您更有意义:

int main()
{
    apple();
}

void apple()
{
    banana();
}

void banana()
{
    printf("hello"); //breakpoint
}