Подтвердить что ты не робот

Что означает "внешний код" в стеке вызовов?

Я вызываю метод в Visual Studio и пытаюсь отладить его, перейдя через стек вызовов.

Некоторые из строк в нем отмечены "Внешний код".

Что именно это означает? Выполнены методы из .dll?

Глупый вопрос; но требуется окончательный ответ.

4b9b3361

Ответ 1

Это строки, в которых в настоящее время информация о символах недоступна для Visual Studio Debugger. Другими словами, Debugger не может получить код из строки, выполненной.

Я написал в настоящее время, потому что информация о символах может быть загружена или настроена.

Для получения дополнительной информации вы можете прочитать следующее: Как указать расположение символов и поведение загрузки

Ответ 2

[Внешний код] означает, что для этой DLL нет отладочной информации.

Что вы можете сделать в окне Call Stack, щелкните правой кнопкой мыши. Затем выберите Show External Code, это расширит [Внешний код] и покажет вам модули, которые вызывают.

enter image description here

После того как вы его расширите, вы увидите DLL, которые вы вызываете, вы можете получить места на диске, нажав Symbol Load Information...

enter image description here

Откроется диалоговое окно, в котором отображаются местоположения на диске

enter image description here

Если вы хотите отлаживать эти внешние файлы, вам нужно получить файлы .pdb для dll и поместить в ту же папку, что и .dll

это должно позволить вам Load symbols (меню на скриншоте 2 выше Symbol Load Information) и начать отладку.

Подробнее о получении файлов .pdb здесь.

И вот пример создания EF.pdb

Надеюсь, это сэкономит вам некоторое время.

Ответ 3

Обозначение "Внешний код" относится ко всему, что не принадлежит "Моему коду".

То, как это описано в документации MSDN здесь Как использовать окно стека вызовов

В управляемом коде по умолчанию. Окно "Стек вызовов" скрывает информацию для не-пользовательского кода. > Вместо скрытой информации появляются следующие обозначения.

< [Внешний код] >

Не-пользовательский код - это любой код, который не является "Моим кодом".

Your Code - это, как вы могли подумать, все, что вы сами пишете. Таким образом, при этом определении все, что принадлежит внешней dll, опущено в трассировке стека вызовов.

Кроме того, согласно Как сделать шаг в только мой код, вы можете отказать отладчику в попытке отслеживать не-пользовательский код.

Здесь вы найдете объяснение того, что user code на самом деле:

Чтобы отличить код пользователя от не-пользовательского кода, Just My Code рассматривает три вещи: файлы DBG, файлы PDB и оптимизацию.

Ответ 4

На эти строки не ссылаются символы отладки, которые вы в настоящее время загрузили.

Этот код может быть частью внешней DLL или встроенного кода внутри CLR. Если вы знаете, какой модуль у него есть, и для них есть символы отладки, вы можете загрузить их в Visual Studio вручную.

Ответ 5

Методы, для которых у вас нет кода/символов. Как .NET framework или сторонние сборки.

Ответ 6

вы можете использовать действие Attach to Process в меню Debug для отладки запуска экземпляра вашего хост-приложения. (в текущем процессе есть файлы debug.pdb).