Рекомендуется использовать отладчик и стек вызовов, и, возможно, это лучшее из возможных решений. Однако, если вы без отладчика, это не сильно поможет.
Знаете ли вы соглашение о вызовах , используемое для вашего конструктора? Если это так, вы можете использовать встроенный ассемблер (при условии, что ваш компилятор его поддерживает), чтобы проверить порядок вызовов функций. При вызове std, наиболее распространенном соглашении для Win32, извлечение стека покажет указатель на адрес, к которому необходимо вернуться после вызова функции (то есть в некотором месте в вызывающей функции). Это не идеально, но вы можете вернуться назад с этой точки, пока не достигнете адреса, который, как вы знаете, является началом функции. Единственная проблема здесь в том, что вам нужно получить адреса для всех ваших функций, чтобы сделать это ... это можно сделать с помощью простого трюка, чтобы получить значение eip в другом регистре прямо вверху функции. , затем переместив это значение в массив, который будет проверен позже при отладке, что-то вроде (синтаксис intel):
call label
label:
pop eax
mov [address of next array entry], eax