Мало кто из нас станет отрицать удивительные возможности отладчиков, но, чтобы сделать их более полезными, можно использовать некоторые уловки.
Например, в Python вы можете использовать проходить абсолютно ничего не делать, кроме как оставить вам место для установки точки останова и позволить вам наблюдать за значениями в окне Watch.
В C# я использовал GC.Collect (), но теперь я использую если (ложь) {}
Какой у тебя самый игривый манекен?
Чарльз, некоторые строки компилируются в IL, поэтому нет места для точки останова. Однако .NET в режиме отладки вставит вместо них инструкцию NOP, так что вы все равно можете их сломать.

В C# вы можете использовать это:
System.Diagnostics.Debugger.Break();
Это вызовет точку останова.
FWIW, он похож на оператор debugger; в JavaScript.
Странно, что это было принято в качестве ответа, поскольку он не касается фактического вопроса, который касался строки, на которой можно установить точку останова. Установление точки останова - совсем другое дело.
Debug.Assert (истина);, который автоматически компилируется из сборок выпуска.
в gcc / g ++:
assert("breakpoint");
поскольку любое значение утверждения, отличное от 0 / NULL, принимается как истина.
или даже
__asm__("nop");
по крайней мере, я знаю, что будет выпущен байт инструкции для срабатывания точки останова. ;)
volatile int e = 9;
Volatile означает, что компилятор не удалит его, потому что я не читаю переменную. «9» просто так, чтобы оно было ненулевым. На мой вкус ноль слишком распространен.
Многие программисты использовали бы 42
@tehp - Но это еще одно нажатие клавиши, а я ленивый инженер! WHINE!
Не очень навороченный, но функциональный.
bool bp;
bp = true; //whereever I need to break.
В VB6 я использую двоеточие отдельно. :
я использую
int x = 0;
Я всегда убеждаюсь, что удаляю эту строку, когда заканчиваю отладку.
см. мой ответ, но вы должны добавить «volatile», чтобы компилятор не удалил его.
Это не сработает, если у вас включен параметр Treat Warnings As Errors.
В C++ я использую
Sleep(0)
иногда или просто найдите используемую переменную и присвойте ее самой себе:
i = i;
Я никогда не писал что-то специально для разрыва, но если бы написал, я бы написал
int moot;
Я использую его, когда есть какой-то обязательный параметр out, который мне не важен, но который я должен предоставить.
Правда, странно, что отладчик VS2010 сдвигает точки останова, если они находятся на пустом операторе, таком как точка с запятой. Несмотря на то, как это выглядит, в отладочной сборке вы по-прежнему можете поставить точку останова на пустой блок управления C# или точку с запятой, и она будет обработана правильно. После того, как меня это немного раздражало, я просто создал это, чтобы использовать вместо этого:
public static class Nop { public static void X() { } };
изменить: чтобы использовать его, поместите Nop.X () в свой код ...
@NoonSilk, что касается обязательного параметра out, я также использую вспомогательную функцию, когда не хочу возвращать значение: «return Failed (out fn_out_param);» где fn_out_param - это параметр out содержащейся функции, а функция Failed просто устанавливает для параметра out значение ничего. Это сохраняет статус возврата в функции, о которой я забочусь, в одной строке.
Для C / C++ я использую
__asm int 3;
Это вызовет исключение точки останова в той строке кода, которую отладчик перехватит. Однако следует предупредить, что ваша программа выйдет из строя с этим исключением, если она не будет запущена в отладчике.
В C# в Visual Studio
{}
или же
;
Думаю, это лучшее решение. :-) Спасибо!
Хорошо.Спасибо. Я использовал int i = 0, и компилятор всегда жалуется на эти пустые назначения.
Зачем вам нужна фиктивная строка для установки точки останова? Когда нельзя использовать настоящую линию?