Невозможно установить следующий оператор из перехвата в Visual Studio на 64-битной ОС - PullRequest
4 голосов
/ 20 января 2011

Мы недавно перешли на 64-битную ОС (Windows 7) и установили Visual Studio 2008. Теперь, пока отлаживается, как только ловится исключение, я не могу установить следующий оператор обратно в код в блоке try. Я погуглил об этом и попал в эту статью.

http://blogs.msdn.com/b/dougste/archive/2007/03/21/unable-to-set-next-statement-when-debugging-a-64-bit-debuggee-in-visual-studio-2005-sometimes.aspx

Это объясняет это, но это датировано еще в 2007 году. Есть ли какое-либо решение или обходной путь сейчас?

Ответы [ 2 ]

9 голосов
/ 20 января 2011

.NET использует основную структуру обработки структурированных исключений Windows.Существует большая разница в способе обработки исключений x64.Он использует таблицы адресов, сгенерированные компилятором, чтобы найти правильный фильтр исключений.В x86 используется связанный список указателей функций, который намного проще реализовать с помощью компилятора.

Одной из причин, по которой был изменен способ x64, было соображение безопасности: вирусный код смог внедрить себя, исправив связанный список и вызвависключение, позволяющее выполнить его полезную нагрузку.В XP SP1 были предприняты меры против этого за счет эффективности.Редизайн x64 позволяет избежать этой стоимости.

Ну, вы можете видеть, к чему это приведет.В любом случае вы должны отлаживать код с установленным значением Platform Target x86.Это также включает Edit + Continue, очень ценную помощь в отладке.Это настройка по умолчанию для проектов VS2010.Перейдите только к AnyCPU для сборки выпуска.

1 голос
/ 20 января 2011

Сумасшедший ответ: поместите в переменную только присвоение переменной, а процесс if / ниже.

...