Создать условную точку останова на стеке вызовов - PullRequest
0 голосов
/ 16 января 2020

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

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

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

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

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

1 Ответ

1 голос
/ 16 января 2020

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

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, чтобы этот код не go в выпуске

Также вы можете создать условие для точка останова, использующая этот класс

...