По моему опыту серверы символов полезны для как управляемой, так и неуправляемой отладки, поскольку они предоставляют столь необходимые детали. Другие уже рассказывали, почему это важно для нативного кода, поэтому я остановлюсь на управляемом коде.
Я довольно много отлаживаю управляемый код с помощью WinDbg + Sos, и мне нужно регулярно копаться в нативной части. Помните, что для ОС управляемое приложение ничем не отличается от неуправляемого приложения. В конце концов, управляемое приложение собирается вызывать библиотеки Win32. Чтобы осмотреть тех, кому нужны правильные символы.
например. если вам нужно узнать подробности о конкретном управляемом вызове, вам действительно нужно взглянуть на нативный код. Одним из примеров может быть случай, когда вы видите Monitor.Enter
в вашем управляемом стеке. На самом деле вы не можете определить, просматривая вызов самостоятельно, был ли вызов только что выполнен или поток действительно ожидает (*). Выгрузив собственный стек вызовов, вы можете узнать, был ли выполнен вызов WaitForMultipleObjects.
(*) Флаги состояния команды !threads
помогут вам в этом, но если вам нужны подробности, дамп собственного стека все еще очень полезен.