2014-09-29 102 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 
}