Visual Studio: дизассемблирование недоступно

Я хочу запустить отладчик Visual Studio в запутанной программе .Net. (Это моя собственная программа — я не пытаюсь взломать чужую программу.)

Когда я компилирую программу с помощью «System.Diagnostics.Debugger.Break()» или подключаю отладчик к запущенному процессу, отладчик показывает «Нет доступных источников». Это я так понимаю - нет исходника, соответствующего запутанной версии программы. Но когда я нажимаю «Показать дизассемблирование», появляется окно дизассемблирования с надписью «Нет доступных дизассемблированных».

Почему? Любые предложения относительно того, что я могу сделать, чтобы заставить разборку работать?

В разделе «Параметры отладки» у меня есть флажки «Включить отладку на уровне адреса» и «Показать дизассемблирование, если источник недоступен».

Спасибо.

РЕДАКТИРОВАТЬ

Просто, чтобы попытаться объяснить немного больше ...

Рассматриваемая программа является моей собственной программой, и используемая программа запутывания также является моей собственной программой. Программа запутывания запускает ILDAsm.exe, изменяет код ILAsm и запускает ILAsm.exe.

Моя запутанность, по-видимому, создает проблемы, поэтому программа больше не работает правильно. Чтобы понять, как/почему это не работает, я хотел бы проследить это. Но почему-то отладчик Visual Studio говорит "Дизассемблирование недоступно", и тогда я вообще ничего не могу сделать. (Когда незапутанная программа запускается в Visual Studio, окно дизассемблирования может быть открыто и показывает ожидаемую информацию. Только запутанная версия создает эту проблему с отладчиком VS.)

РЕДАКТИРОВАТЬ 2

Не смог найти ответ на свой вопрос, но теперь у меня есть своего рода обходной путь.

Я установил WinDbg и убедился, что он может подключаться к моей обфусцированной программе и может, по крайней мере, выполнять ее по одному шагу и показывать текущее место выполнения в окне дизассемблирования. Но я никогда раньше не пользовался WinDbg, и это выглядит немного устрашающе.

Я также последовал совету, который я видел в нескольких местах, чтобы загрузить sos.dll в WinDbg. Может быть, это поможет.

Но я предполагаю, что на самом деле я в конечном итоге добавлю в свою программу множество временных операторов регистрации в тех местах, где она не работает, и, надеюсь, таким образом получу некоторое понимание.


person RenniePet    schedule 15.07.2011    source источник
comment
Это моя собственная программа - тогда, предположительно, у вас есть исходный код. Отладить это?   -  person Mitch Wheat    schedule 15.07.2011
comment
Нет, моя проблема в том, что мои запутывания делают программу нефункциональной неочевидными способами. Было бы легче выяснить, смогу ли я отследить запутанную программу и увидеть, где она ломается.   -  person RenniePet    schedule 15.07.2011
comment
См. stackoverflow.com /questions/5670626/ и stackoverflow.com/questions/5761202/   -  person RenniePet    schedule 15.07.2011
comment
RenniePet: вы уверены, что причиной вашей проблемы является обфускация?   -  person Mitch Wheat    schedule 15.07.2011
comment
См. редактирование. Спасибо за ваш интерес.   -  person RenniePet    schedule 15.07.2011


Ответы (1)


Хорошо, я случайно наткнулся на то, что я делаю неправильно.

Как я упоминал в первом редактировании моего вопроса, моя запутанность выполняется путем запуска ILDAsm.exe, изменения операторов ILAsm и последующего запуска ILAsm.exe. Оказывается, мне не хватало параметра /Debug при запуске ILAsm.exe. Таким образом, несмотря на то, что мои сборки Visual Studio были сборками Debug, преобразования JIT во время выполнения были преобразованиями Release/Optimize.

С параметром /Debug, указанным в ILAsm.exe, я получаю файл PDB, а когда отладчик Visual Studio подключается к моей программе, я получаю отображение исходного кода IL и, если я его запрашиваю, также отображение дизассемблирования! Так что теперь все хорошо!

person RenniePet    schedule 07.08.2011