(C#/Mono.Cecil) Определение всех инструкций выхода метода с использованием только кодов операцийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 (C#/Mono.Cecil) Определение всех инструкций выхода метода с использованием только кодов операций

Сообщение Anonymous »

При создании игры на Unity я искал решение, похожее на OnMethodBoundaryAspect.OnExit PostSharp, как описано в этом блоге.
Однако не похоже, что PostSharp можно использовать с Unity, если только вы не создадите его как DLL (и даже тогда неясно, какие платформы будут его поддерживать, следует ли использовать более старую версию и т. д.).
Я рассматривал стороннюю библиотеку под лицензией MIT, которая использует Mono.Cecil для создания эквивалентных определений OnEntry/OnExit, но не фиксирует исключения в OnExit, а просто вставляет вызов перед последним Инструкция в функции.
Учитывая, что генерацию/повторную генерацию исключения можно попробовать/перехватить, как можно определить по последовательности инструкций (каждая из которых имеет код операции), которая инструкции действительно выходят из функции?
Пытался вставить перед каждым OpCodes.Ret, что было хорошо для ранних вызовов возврата, но, очевидно, обнаружил, что обработка исключений не будет использовать OpCodes .Ret и просто проверка OpCodes.Throw/

Код: Выделить всё

OpCodes.Rethrow
не указывает, что будет выходить из функции.
Изменить: также реализована проверка OpCodes.Ret, которая не очень хорошо сочетается с использованием сопрограммой «возврата доходности».
Edit2: Исключения, создаваемые функциями, вызываемыми в теле функции, таким образом не будут обнаружены.
Edit3: Функции, которые заканчиваются операторами итератора, такими как foreach, не завершаются с помощью OpCodes.Ret.< /п>

Подробнее здесь: https://stackoverflow.com/questions/790 ... st-opcodes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заменить параметр метода переменной с помощью Mono.Cecil
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Вызовите Mono после завершения первого Mono и верните результат первого Mono.
    Anonymous » » в форуме JAVA
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Использование Mono.Cecil для создания HelloWorld IL, ориентированного на .NET 8, ошибка при загрузке System.Private.Core
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Добавление атрибута сборки с помощью Mono.Cecil throws
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Mono.cecil Degate Referencts System.private.corelib вместо System.Runtime
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»