Я вызываю метод в Visual Studio и пытаюсь отладить его, перейдя через стек вызовов.
Некоторые из строк в нем отмечены "Внешний код".
Что именно это означает? Выполнены методы из .dll?
Глупый вопрос; но требуется окончательный ответ.
Я вызываю метод в Visual Studio и пытаюсь отладить его, перейдя через стек вызовов.
Некоторые из строк в нем отмечены "Внешний код".
Что именно это означает? Выполнены методы из .dll?
Глупый вопрос; но требуется окончательный ответ.
Это строки, в которых в настоящее время информация о символах недоступна для Visual Studio Debugger
. Другими словами, Debugger
не может получить код из строки, выполненной.
Я написал в настоящее время, потому что информация о символах может быть загружена или настроена.
Для получения дополнительной информации вы можете прочитать следующее: Как указать расположение символов и поведение загрузки
[Внешний код] означает, что для этой DLL нет отладочной информации.
Что вы можете сделать в окне Call Stack
, щелкните правой кнопкой мыши. Затем выберите Show External Code
, это расширит [Внешний код] и покажет вам модули, которые вызывают.
После того как вы его расширите, вы увидите DLL, которые вы вызываете, вы можете получить места на диске, нажав Symbol Load Information...
Откроется диалоговое окно, в котором отображаются местоположения на диске
Если вы хотите отлаживать эти внешние файлы, вам нужно получить файлы .pdb
для dll и поместить в ту же папку, что и .dll
это должно позволить вам Load symbols
(меню на скриншоте 2 выше Symbol Load Information
) и начать отладку.
Подробнее о получении файлов .pdb здесь.
Надеюсь, это сэкономит вам некоторое время.
Обозначение "Внешний код" относится ко всему, что не принадлежит "Моему коду".
То, как это описано в документации MSDN здесь Как использовать окно стека вызовов
В управляемом коде по умолчанию. Окно "Стек вызовов" скрывает информацию для не-пользовательского кода. > Вместо скрытой информации появляются следующие обозначения.
< [Внешний код] >
Не-пользовательский код - это любой код, который не является "Моим кодом".
Your Code
- это, как вы могли подумать, все, что вы сами пишете. Таким образом, при этом определении все, что принадлежит внешней dll, опущено в трассировке стека вызовов.
Кроме того, согласно Как сделать шаг в только мой код, вы можете отказать отладчику в попытке отслеживать не-пользовательский код.
Здесь вы найдете объяснение того, что user code
на самом деле:
Чтобы отличить код пользователя от не-пользовательского кода, Just My Code рассматривает три вещи: файлы DBG, файлы PDB и оптимизацию.
На эти строки не ссылаются символы отладки, которые вы в настоящее время загрузили.
Этот код может быть частью внешней DLL или встроенного кода внутри CLR. Если вы знаете, какой модуль у него есть, и для них есть символы отладки, вы можете загрузить их в Visual Studio вручную.
Методы, для которых у вас нет кода/символов. Как .NET framework или сторонние сборки.
вы можете использовать действие Attach to Process в меню Debug для отладки запуска экземпляра вашего хост-приложения. (в текущем процессе есть файлы debug.pdb).