2014-09-29 53 views
0

系统信息:Windows 7中,2010 MSVS口译调用堆栈输出

下面是一个简单的程序,在我测试在调试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文件。

+0

的[主mainCRTStartup之间的区别是什么?(HTTP可能重复:// stackoverflow.com/questions/22934206/what-is-the-difference-between-main-and-maincrtstartup) – demoncodemonkey 2014-09-29 11:02:14

+0

@demoncodemonkey感谢您的链接。但是,我如何解释Call Stack的输出? – gpuguy 2014-09-29 11:04:55

回答

0

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

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

这段代码粘贴到您的文件,看看当你打破了调用堆栈更有意义给你:

int main() 
{ 
    apple(); 
} 

void apple() 
{ 
    banana(); 
} 

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