Здравствуйте, не подскажите, как можно выполнять отдельные IL команды из C#. Дело в том, что мне требуется реализовать обработку кода написанного пользователем, и перекомпилить данный код в IL. С этим особых проблем нет, но мне нужно так же добавить возможность пошаговой отладки данного кода. Насколько я понял, единственная возможность выполнить IL из программы, это при помощи динамического создания кода, а если мне требуется выполнить только одну команду? Неужели каждый раз необходимо пересоздавать сборку, классы и т.д. Буду очень рад любой информации. Заранее спасибо.
Здравствуйте, cainam, Вы писали:
C>Здравствуйте, не подскажите, как можно выполнять отдельные IL команды из C#. Дело в том, что мне требуется реализовать обработку кода написанного пользователем, и перекомпилить данный код в IL. С этим особых проблем нет, но мне нужно так же добавить возможность пошаговой отладки данного кода.
Данного — это какого? Написанного пользователем или IL-а?
C>Насколько я понял, единственная возможность выполнить IL из программы, это при помощи динамического создания кода, а если мне требуется выполнить только одну команду? Неужели каждый раз необходимо пересоздавать сборку, классы и т.д.
Если ты хочешь отлаживать пользовательский код, то предусмотри в своем генераторе возможность вставить после каждой строчки кода вызова колбэка. В этом случае в режиме работы просто будешь передавать пустой колбэк, а в режиме отладки колбэк будет перехватывать управление и делать что ты захочешь (подсвечивать текущую строку, показывать значение переменных, ждать когда пользователь нажмет Next, ...).
C>Буду очень рад любой информации. Заранее спасибо.
Здравствуйте, Lloyd, Вы писали:
L>Если ты хочешь отлаживать пользовательский код, то предусмотри в своем генераторе возможность вставить после каждой строчки кода вызова колбэка.
Здравствуйте, adontz, Вы писали:
A>А с исключениями что делать?
Догадайся.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как выполнить отдельную IL команду из C#
От:
Аноним
Дата:
12.04.07 13:01
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Данного — это какого? Написанного пользователем или IL-а?
Написанного пользователем
L>Если ты хочешь отлаживать пользовательский код, то предусмотри в своем генераторе возможность вставить после каждой строчки кода вызова колбэка. В этом случае в режиме работы просто будешь передавать пустой колбэк, а в режиме отладки колбэк будет перехватывать управление и делать что ты захочешь (подсвечивать текущую строку, показывать значение переменных, ждать когда пользователь нажмет Next, ...).
Да, с этим всё понятно, но проблема немного в другом. Мне нужно перегенерить строчку написанную пользователем в IL, а затем исполнить эти IL команды. Вопрос в том возможно ли выполнить их отдельно, т.е. можно ли запустить AssemblyBuilder под дебагом, чтобы он выполнял код только до определённой точки?
Здравствуйте, Lloyd, Вы писали:
L>Данного — это какого? Написанного пользователем или IL-а?
Написанного пользователем
L>Если ты хочешь отлаживать пользовательский код, то предусмотри в своем генераторе возможность вставить после каждой строчки кода вызова колбэка. В этом случае в режиме работы просто будешь передавать пустой колбэк, а в режиме отладки колбэк будет перехватывать управление и делать что ты захочешь (подсвечивать текущую строку, показывать значение переменных, ждать когда пользователь нажмет Next, ...).
Да, с этим всё понятно, но проблема немного в другом. Мне нужно перегенерить строчку написанную пользователем в IL, а затем исполнить эти IL команды. Вопрос в том возможно ли выполнить их отдельно, т.е. можно ли запустить AssemblyBuilder под дебагом, чтобы он выполнял код только до определённой точки?
Здравствуйте, cainam, Вы писали:
L>>Если ты хочешь отлаживать пользовательский код, то предусмотри в своем генераторе возможность вставить после каждой строчки кода вызова колбэка. В этом случае в режиме работы просто будешь передавать пустой колбэк, а в режиме отладки колбэк будет перехватывать управление и делать что ты захочешь (подсвечивать текущую строку, показывать значение переменных, ждать когда пользователь нажмет Next, ...).
C>Да, с этим всё понятно, но проблема немного в другом. Мне нужно перегенерить строчку написанную пользователем в IL, а затем исполнить эти IL команды. Вопрос в том возможно ли выполнить их отдельно, т.е. можно ли запустить AssemblyBuilder под дебагом, чтобы он выполнял код только до определённой точки?
Возможно, но это будет тебе стоить столько, что лучше сделать так, как я предложил.