2014-09-29 2 views
0
Информация

системы: Windows 7, МСВС 2010Устный Call Stack выход в Visual Studio

Ниже простая программа, в которой я тестирование, как Call Stack вариант в отладке работы

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


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

Когда я отладки контроль попадает в точку останова и Call Stack является:

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()?

Update

Только что проверил, тот же выход в Call Stack, даже если я с .c файл вместо .cpp файл.

+0

возможно дубликат [В чем разница между основным и mainCRTStartup?] (HTTP: // stackoverflow.com/questions/22934206/what-is-the-difference-between-main-and-maincrtstartup) – demoncodemonkey

+0

@demoncodemonkey Спасибо за ссылку. Но как интерпретировать вывод стека вызовов? – gpuguy

ответ

0

Стек вызовов используется для определения, в какой строке кода находится отладчик. Верхний - это текущее местоположение.

В вашем примере соответствующая строка testapp.exe!main() Line 10 C++, что означает, что она остановлена ​​функцией main(), которая находится в строке 10 в вашем файле. Обычно это также содержит имя файла.

Вставьте этот код в файл и посмотреть, если стек вызовов имеет больше смысла для вас, когда вы ломаете:

int main() 
{ 
    apple(); 
} 

void apple() 
{ 
    banana(); 
} 

void banana() 
{ 
    printf("hello"); //breakpoint 
} 
Смежные вопросы