系统信息: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文件。
答案 0 :(得分:0)
调用堆栈用于确定调试器当前所在的代码行。最上面的是当前位置。
在您的示例中,相关行是testapp.exe!main() Line 10 C++
,这意味着它停在了一个名为main()
的函数中,该函数位于文件的第10行。通常这也包含文件名。
将此代码粘贴到您的文件中,看看在您休息时调用堆栈是否对您更有意义:
int main()
{
apple();
}
void apple()
{
banana();
}
void banana()
{
printf("hello"); //breakpoint
}