Шаг 26 - Стек вызовов

Просмотр порядка вызовов может быть очень полезен в ситуации когда функция вызывается из разных мест. Вот простой пример кода:

#include "stdafx.h"
#include "afx.h"

void test();
void atest();

void main()
{
	int i=255;
	atest();
	test();
	i=i+i;
}

void test()
{
	atest();
}

void atest()
{
	
}

Функция ates() может быть вызвана из двух мест. В реальном программировании под Windows с использованием MFC одна и таже функция может быть вызвана из огромного количества мест. При этом в функцию могут быть переданы ошибочные параметры и нас заинтересует кто такой поросенок. Вот тут-то мы сможем это узнать. Запускает программу на отладку с остановкой в atest() и открываем окно вызовов. Сделать это можно через меню.

26_1.gif (3871 b)

И видим, что atest() вызван из main().

26_2.gif (2758 b)

Запустим программу до той же точки.

26_3.gif (3042 b)

А теперь видим, что atest() вызвана из test(), ее в свою очередь вызвала main() (ведь параметры могут просто передаваться от функции к функции).


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.