У меня есть проект С#, над которым я работаю, и я пытаюсь отладить проблему, которая вызывает необработанное исключение. Проблема в том, что всякий раз, когда я ставлю точку останова, и она срабатывает, если я нажимаю «Шаг в», она просто возобновляет выполнение вместо перехода к следующей инструкции. Кто-нибудь знает, как выполнять инструкции С# 1 за 1 вместо возобновления выполнения?
Я использую Visual Studio 2019 в Windows 10 для отладки. Проект представляет собой решение с несколькими проектами, где основной проект написан на C#, а другие написаны на C++ и C. Я могу успешно загрузить символы для проекта C#.
Вот репозиторий github.
Редактировать:
Проект, над которым я работаю, — это эмулятор NES под названием Mesen, и проблема, которую я пытаюсь отладить, — это необработанное исключение во время онлайн-игры. Исключение срабатывает, по-видимому, случайным образом, и я пробовал несколько действий, чтобы попытаться вызвать его, но это все равно произошло только само по себе.
private void StartEmuThread()
{
if (_emuThread == null) {
_emuThread = new Thread(() => {
try {
InteropEmu.Run();
_emuThread = null;
} catch(Exception ex) {
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
_emuThread = null;
}
});
_emuThread.Start();
}
UpdateMenus();
}
Я пытаюсь поставить точку останова на InteropEmu.Run() и сделать один шаг оттуда, но каждый раз, когда я нажимаю шаг, программа просто возобновляется.
Вот скриншот из визуальной студии, когда я попал в точку останова на InteropEmu.Run()
И здесь он возобновляется после того, как я нажимаю шаг вверху на панели инструментов отладки.
Вот исключение, которое я пытаюсь устранить
Спасибо
Нет, или, по крайней мере, я так не думаю, но это правда, что в проектах C++ нет доступных символов. На самом деле с символами компилируется только основной проект, остальные даже не отображаются в списке модулей.
Вы пытались показать окно «Исключения» (меню «Отладка») и поставить галочку рядом с «Исключениями CLR», чтобы VS прерывался, как только исключение выбрасывается / прерывается в строке, которая выдает?
Да, при отладке я перешел к настройкам исключений и проверил System.Runtime.InteropServices.SEHException, что я обычно и получаю, но все, что мне дали, это строка кода, вызывающая исключение. Я прокомментировал это и буду проводить дополнительные тесты, но я все еще не могу выполнить один шаг по коду.
Публикация записи экрана может помочь. У вас включен Just My Code
Только мой код включен в Инструменты > Параметры > Отладка. Также я добавил несколько скриншотов и подробностей об ошибке, которую я устраняю.
Я пробовал несколько разных вариантов сборки, и оказалось, что пошаговое выполнение отключено для сборок выпуска, но не для сборок отладки. Я попробовал отладочную сборку, и на этот раз она сработала.
Вы случайно не пытаетесь "вступить" в метод, который не является частью исходного кода вашего проекта?