Вызов частного метода с сохранением стека вызовов

Я пытаюсь найти решение для «взлома непубличных методов».

Я просто хочу вызвать RuntimeMethodInfo.InternalGetCurrentMethod (...) , передача моего собственного параметра (чтобы я мог реализовать GetCallingMethod () ) или напрямую использовать RuntimeMethodInfo.InternatGetCurrentMethod (ref StackCrawlMark.LookForMyCaller) в моих процедурах ведения журнала. GetCurrentMethod реализован как:

[MethodImpl(MethodImplOptions.NoInlining)] 
public static MethodBase GetCurrentMethod() 
{     
    StackCrawlMark lookForMyCaller = StackCrawlMark.LookForMyCaller;     
    return RuntimeMethodInfo.InternalGetCurrentMethod(ref lookForMyCaller); 
}

где InternalGetCurrentMethod объявлен: internal: -).

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

Каковы мои шансы сохранить трассировку стека близко к исходной (по крайней мере, в пределах допустимого StackCrawlMark s, которыми являются LookForMe , LookForMyCaller и LookForMyCallersCaller . Есть ли какой-нибудь сложный способ достичь того, чего я хочу?

14
задан Strigoides 9 December 2014 в 20:22
поделиться