Какая ваша любимая фиктивная строка, на которой можно поставить точку останова?

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

Например, в Python вы можете использовать проходить абсолютно ничего не делать, кроме как оставить вам место для установки точки останова и позволить вам наблюдать за значениями в окне Watch.

В C# я использовал GC.Collect (), но теперь я использую если (ложь) {}

Какой у тебя самый игривый манекен?

Зачем вам нужна фиктивная строка для установки точки останова? Когда нельзя использовать настоящую линию?

Charles Bretana 07.11.2008 22:31

Чарльз, некоторые строки компилируются в IL, поэтому нет места для точки останова. Однако .NET в режиме отладки вставит вместо них инструкцию NOP, так что вы все равно можете их сломать.

FlySwat 07.11.2008 22:37
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
25
2
4 661
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

В C# вы можете использовать это:

System.Diagnostics.Debugger.Break();

Это вызовет точку останова.

FWIW, он похож на оператор debugger; в JavaScript.

orad 21.01.2014 02:51

Странно, что это было принято в качестве ответа, поскольку он не касается фактического вопроса, который касался строки, на которой можно установить точку останова. Установление точки останова - совсем другое дело.

Jim Balter 15.04.2016 10:48

Debug.Assert (истина);, который автоматически компилируется из сборок выпуска.

в gcc / g ++:

assert("breakpoint");

поскольку любое значение утверждения, отличное от 0 / NULL, принимается как истина.

или даже

__asm__("nop");

по крайней мере, я знаю, что будет выпущен байт инструкции для срабатывания точки останова. ;)

volatile int e = 9;

Volatile означает, что компилятор не удалит его, потому что я не читаю переменную. «9» просто так, чтобы оно было ненулевым. На мой вкус ноль слишком распространен.

Многие программисты использовали бы 42

thepaulpage 24.06.2010 21:34

@tehp - Но это еще одно нажатие клавиши, а я ленивый инженер! WHINE!

Robert 24.06.2010 23:22

Не очень навороченный, но функциональный.

bool bp;

bp = true; //whereever I need to break.

В VB6 я использую двоеточие отдельно. :

я использую

int x = 0;

Я всегда убеждаюсь, что удаляю эту строку, когда заканчиваю отладку.

см. мой ответ, но вы должны добавить «volatile», чтобы компилятор не удалил его.

Robert 07.11.2008 23:48

Это не сработает, если у вас включен параметр Treat Warnings As Errors.

orad 21.01.2014 02:53

В 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 значение ничего. Это сохраняет статус возврата в функции, о которой я забочусь, в одной строке.

Glenn Slayden 13.10.2010 23:00

Для C / C++ я использую

__asm int 3;

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

В C# в Visual Studio

{}

или же

;

Думаю, это лучшее решение. :-) Спасибо!

Nir Lanka 15.10.2018 08:26

Хорошо.Спасибо. Я использовал int i = 0, и компилятор всегда жалуется на эти пустые назначения.

Daniel Williams 16.01.2019 02:54

Другие вопросы по теме