2014-01-09 6 views
0

Я вызываю метод другой сборки C#, который возвращает true или false.Как создать stacktrace метода, который называется

Теперь я хочу узнать, вызывает ли сам метод другой метод для получения возвращаемого значения или просто возвращает true или false, потому что он жестко закодирован.

Я уже решил проблему, посмотрев код IL, но но мне интересно, есть ли более общий способ сделать это с помощью stacktrace?

+0

Это не имеет смысла. Чтобы получить полезную трассировку стека, вы должны написать код внутри вызываемого метода. Нет смысла писать это, когда вам нужно сначала его найти. –

ответ

1

В стеке будут отображаться вызовы, ведущие к текущей строке, но не полная история. Другими словами, вы можете видеть, был ли вызван метод , а он вызывается. После того, как он возвращается из метода, информация о том, что происходит внутри, теряется.

Так что если вы владеете этим методом, который может быть вызван или не может быть вызван, или какие-либо другие методы, которые он инициировал бы (например, через подписку на события), вы могли бы разместить StackFrame.GetFrame в одном из них и посмотреть, куда он идет из. В противном случае, я думаю, что единственный способ сделать это - дублировать логику внутри метода, чтобы определить, будет ли это вызвано.

+0

Не забывайте оптимизацию компилятора при компиляции в режиме выпуска, стековый фрейм может быть «неполным». – Maarten

+0

Хорошо, спасибо за объяснение. Что вы подразумеваете под дублированием логики? Я не хочу создавать интерпретатор для C# или IL. Если возможно, я бы не захотел изменить базовый код, потому что моя программа должна генерировать только List for wiki. – Netbus

+0

@Netbus Я имею в виду вручную писать скелет метода, который вы вызываете, чтобы узнать, достигнет ли он ветки, где он вызывает второй метод. – nmclean

0

К сожалению, это невозможно, потому что другой узел может быть просто .dll которые вы могли бы указать в своем проекте.

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

+0

Я не собираюсь начинать спор, но нет ничего неэтичного в использовании декомпилятора. Это не что иное, как покупать понравившийся вам пищевой продукт, есть его и решать, хотите ли вы сделать свой собственный, глядя на ингредиенты, перечисленные на упаковке. :) –

+0

@codenoire Ты знаешь лучшего чувака. Если взломать несанкционированный код без разрешения владельцев, это не является неэтичным. Тогда с тобой что-то действительно не так. –

+0

@PrakashVishwakarma Достаточно сказать, что смотреть на внутреннюю работу продукта неэтично. Также «несанкционированно» нарушить гарантийное уплотнение с помощью отвертки. – nmclean

Смежные вопросы