В Windows, при отсутствии символов для модуля, вовлеченного в стек вызовов, скажите относительно дампа катастрофического отказа, то весь вызов ниже того модуля в стеке вызовов был бы неправильным (не, только имена пропущены, но также и последовательность).
На Linux или Mac OS X, если символы отсутствуют, не показывают имена функций, но последовательность вызова, все еще остаются.
Какое различие в механизме стека вызовов раскручивают, или поколение символа вызывают такое различие?
В Windows все еще возможно получить полный стек вызовов для приложений без символьной информации, при условии, что "указатели стекового кадра" помещены в стек вызовов. Эти указатели стекового кадра генерируются компилятором Visual Studio, если вы компилируете с отладкой, но не если вы компилируете с оптимизацией (/Ox). Поэтому, если вы все еще хотите иметь указатели стекового фрейма при оптимизации, вы должны добавить опцию компилятора /Oy- (Oy- означает: не удалять указатели стекового фрейма).
Указатели кадров стека не делают ничего другого, кроме как просто указывают на следующий кадр стека. Поэтому отладчики и обработчики аварийных ситуаций могут легко получить стек (просматривая указатели кадров стека, чтобы следовать за стеком, и используя адреса возврата в стеке).
Если приложение не имеет указателей стековых кадров, отладчик или аварийный обработчик должен использовать отладочную информацию, чтобы узнать количество аргументов функции, количество локальных переменных, ... чтобы получить размер каждого стекового кадра и проследить все стековые кадры в стеке вызовов.