Создать условную точку останова на стеке вызовов

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

Например, у меня есть эти [мета] стеки вызовов

myFunc()
Intermediate.class.intermediateFunction()
Interesting.class.interestingFunction()

myFunc()
Intermediate.class.intermediateFunction()
Boring.class.boringFunction()

Я хочу установить myFunc() останова в myFunc() которая активируется, только если она вызывается косвенно из функции interestingFunction() функции interestingFunction() .

Всего 1 ответ


Вы можете запросить трассировку стека программно, используя пространство имен System.Diagnostics. Йой может сделать что-то вроде этого:

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
var f = st.GetFrames();
var names = f.Select(f => f.GetMethod().Name).ToList();
if (names.Contains("DoSomething4"))
{
    var a = 0; // Set breakpoint in this line or use Debugger.Launch()
}

Вы можете использовать #if DEBUG и #endif, чтобы этот код не вышел в релиз

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


Есть идеи?

10000