Избегайте отладки и callstack для куска кода в C # - PullRequest
4 голосов
/ 17 января 2011

В Delphi директивы компилятора {$ d-} и {$ l-} позволяют эффективно избегать генерации информации отладки и локальной переменной для определенного раздела кода.

В практическом плане, который приводит к "скрытию" кода от представления отладки, он не появляется в стеке вызовов и вы не вступаете в него при отладке.

Есть ли способ достичь того же результата в c # с использованием VS 2008?

Примечание: причина в том, что у нас есть стабильная структура, которую не нужно отлаживать, но она может испортить стек вызовов и стандартный поток отладки.

Ответы [ 3 ]

6 голосов
/ 17 января 2011

Я использую DebuggerNonUserCodeAttribute , чтобы вы по умолчанию не ломались и не входили в код; Однако выгода от этого по сравнению с DebuggerStepThrough заключается в том, что вы можете перейти к настройке «Параметры» -> «Отладчик» -> «Просто мой код» и разрешить взлом / отладку кода, который вы отметили. Это значительно помогает, если у вас есть проблемы. Обычно я использую его на целых классах.

Кстати, стек вызовов автоматически скрывает не пользовательский код, отмеченный этим атрибутом :) Конечно, вы можете просто щелкнуть правой кнопкой мыши по окну стека вызовов и переключить «Показать внешний код», чтобы скрыть / показать недостающую информацию стека.

3 голосов
/ 17 января 2011

Я думаю, вы хотите, чтобы атрибут DebuggerStepThrough:

DebuggerStepThrough инструктировал отладчик проходить код, а не входить в код.

[DebuggerStepThrough]
public void MyMethod()
{

}

Это особенно полезно для сеттеров / геттеров, поскольку их отладка обычно просто добавляет шум (пример из msdn):

public int Quantity
{ 
    [DebuggerStepThrough] 
    get { return ComplexLogicConvertedToMethod(); } 
    [DebuggerStepThrough]      
    set { this.quantity = value ; }
}
0 голосов
/ 17 января 2011

Или пропустить определенный раздел кода:

... some production code
#if DEBUG
    Console.WriteLine("Debug version");
#endif
... some more production code
...