найти исходный код, соответствующий адресу машины

Я отлаживаю аварийный дамп, и мне ясно, по какому адресу происходит сбой процесса. Исходный код написан на C#. Мой вопрос: есть ли быстрый способ найти соответствующий исходный код, связанный с адресом сбоя?


person George2    schedule 24.02.2009    source источник
comment
У вас есть соответствующий файл .pdb? Если вы это сделаете, должен быть какой-то способ сопоставления адреса со строкой исходного кода.   -  person driis    schedule 24.02.2009
comment
Конечно, у меня есть PDB и соответствующий сервер символов. Какую команду следует использовать в Windbg для поиска связанного исходного кода, относящегося к определенному адресу? Я не уверен, сможет ли Windbg после JIT во время выполнения найти оригинальный исходный код C#. :-)   -  person George2    schedule 24.02.2009


Ответы (3)


Любая приличная IDE с отладчиком сделает это автоматически. В противном случае вам, как правило, нужно создавать проект с включенной отладочной информацией (символы отладки) (что не рекомендуется для производства, поскольку это делает вашу программу больше и ее легче реконструировать), а команды отладчика, такие как where или trace, будут отображать программу. линии, на которых вы находитесь.

person Lee B    schedule 24.02.2009
comment
Спасибо Lee B, я исправляю аварийный дамп. Не могли бы вы показать мне, как найти соответствующую строку исходного кода в этом случае? Ваш ответ больше о том, как найти во время отладки процесс, отличный от отладки дампа? - person George2; 24.02.2009
comment
Кстати: в Visual Studio есть способы настроить путь к символу? Раньше я устанавливал путь к символу только в Windbg, а не в Visual Studio. - person George2; 24.02.2009
comment
Ах, извините. Для аварийных дампов все зависит от рассматриваемого отладчика и его руководства. Однако основная идея заключается в том, что вы просто загружаете отладчик и выбираете (или вводите) команду для загрузки дампа. Он должен просто найти код оттуда. Если нет, вам также может потребоваться указать исходный каталог. - person Lee B; 24.02.2009
comment
Базовые (только для pdb) символы не повлияют на ваш исполняемый код, и вам не нужно их распространять. (Полные символы отладки — это другое дело.) - person Richard; 24.02.2009
comment
Я устанавливаю путь к символу (где находится PDB), так что вы имеете в виду, что этого недостаточно, и мне нужно настроить путь к исходному коду? - person George2; 24.02.2009
comment
Путь символа в vS: Инструменты | Опции | Отладчик | Символы. - person Richard; 24.02.2009
comment
Ричард, я правильно настроил путь к PDB в пути к символу, мне все еще нужно настраивать исходный путь? Если да, какую команду после установки следует использовать для отображения связанного исходного кода C#? - person George2; 24.02.2009
comment
Спасибо, Ричард, но как настроить исходный путь в VSTS? - person George2; 24.02.2009

Вам нужны файлы символов (.pdb) из сборки.

Также включите использование сервера символов MS, чтобы VS и WinDBG автоматически получали правильные файлы символов.

person Richard    schedule 24.02.2009
comment
в Visual Studio есть способы настроить путь к символу? Раньше я устанавливал путь к символу только в Windbg, а не в Visual Studio. - person George2; 24.02.2009
comment
Настройка пути к символу означает, что мой Windbg настроен правильно, и я знаю адрес машины, какую команду следует использовать для отображения соответствующего исходного кода? :-) - person George2; 24.02.2009

этот блог — кладезь полезной информации по анализу аварийных дампов.

Здесь начинается отладка управляемый аварийный дамп приложения стоит отметить, что он ссылается на предыдущие статьи и предполагает, что вы прочитали и поняли их. Также предполагается, что вы немного знакомы с Son of Strike, невероятно полезным, но несколько загадочным расширением отладки для работы с управляемым кодом.

person ShuggyCoUk    schedule 24.02.2009
comment
Я учился, и информация очень полезна. Но я не могу найти, как найти связанный управляемый исходный код, относящийся к конкретному адресу машины. Любые идеи или комментарии? - person George2; 25.02.2009
comment
Управляемый исходный код не должен вызывать сбой (за исключением ошибки JIT). У вас должен быть частично завершенный кадр стека на основе того, что у вас уже есть. это должно быть дополнено дополнительными доступными символами (скажем, общедоступными MS), но в конечном итоге функции в... - person ShuggyCoUk; 25.02.2009
comment
... вершина стека может быть сторонними dll, для которых у вас нет символов ... по крайней мере, у вас тогда есть идея, чей код плохо себя ведет - person ShuggyCoUk; 25.02.2009
comment
Что вы имеете в виду. Управляемый исходный код не должен быть причиной сбоя? Из анализа -v это мой собственный управляемый метод, и исключение — NullReferenceException. Итак, я подозреваю, что в моем коде что-то не так (например, ссылка на NULL). И я хочу это выяснить. Любые идеи? - person George2; 03.03.2009
comment
Ах да, исключение нулевой ссылки не должно вызывать аварийный дамп (если вы не делаете это самостоятельно в коде), просто трассировка стека... Просто включите файлы pdb, и когда произойдет ошибка, вы получите точный номер строки - person ShuggyCoUk; 03.03.2009