Как установить точку останова в каждом методе в VS2010

У меня есть большее (c#) wpf применение с n-классы и m-методы . Я хотел бы поместить в каждый метод точку останова, поэтому каждый раз я нажимаю кнопку в своем заявлении, или любой метод называют, я хотел бы, чтобы применение в VS2010 поразило ту точку останова. Я хочу понять поток/прогресс применения.

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

Есть ли какая-либо команда или инструмент, чтобы поместить везде в мое решение VS2010 точку останова?

edit: maybe something like the following addin: http://weblogs.asp.net/uruit/archive/2011/08/04/visual-studio-2010-addin-setting-a-class-breakpoint.aspx

edit2: there are some answers but none of them seems like the straight forward easy solution. Anything else?

16
Спасибо за связь, но это не решает проблему. Я хочу автоматически установить точку останова для всех возможных методов в Решении, не имея необходимость определять их имена.
добавлено автор Gero, источник
Проверьте мой ответ в stackoverflow.com/questions/3565694/…
добавлено автор erandros, источник
Можно установить многих точка останова за один шаг, взглянуть: codeproject.com/Articles/139120/… Однако it' s не устанавливающий точку останова для каждый метод. Обратите внимание, что это могло замедлите отладку чрезвычайно.
добавлено автор Tim Schmelter, источник
Это - безумная идея, но безумно полезный!
добавлено автор Grant Thomas, источник
добавлено автор sloth, источник

5 ответы

ОТРЕДАКТИРУЙТЕ: проверенный только с C++

Я столкнулся эта статья это показывает, как установить точку останова в начале каждого метода в классе. Я проверил его с ПРОТИВ 2010. Базовый процесс (используя Visual C++):

  1. Go to Debug > New Breakpoint > Breakpoint at Function (Ctrl + B).
  2. In the Function field, insert MyClass::*
  3. This will show up as a single breakpoint in the Breakpoints window, but as soon as one of MyClass's methods is hit, you'll see a breakpoint at the beginning of every function in MyClass, and all of these will be "children" of the original breakpoint in the Breakpoints window.

я воображаю это, работает с C# также.

5
добавлено
Спасибо за связь, но я не смог воспроизвести тот же самый эффект со своим C# классом. Никакие Точки останова. Не могли бы Вы просто сделать маленький класс с 2 методами и проверить, работает ли это с C# также?
добавлено автор Gero, источник
После некоторого поиска я нашел этот ответ. В одном из комментариев к нему говорится, что этот метод только работает с C++. Извинения за вводящий в заблуждение ответ.
добавлено автор Vicky Chijwani, источник

This answer suggests a macro that will do as you ask, but my personal recommendation would be to use a profiler instead - one that lets you pause and resume profiling on the fly (nearly all of the commercial profilers do), and then hit the "Start Profiling" button just before you do your button click. Viewing the call tree in the profiler is often a very convenient way of gaining insight into what an application is doing, much more than stepping through in the debugger.

UPDATE: This feature exists in a Visual Studio extension that I'm working on called OzCode. With OzCode, when you click on the icon next to the class definition, you'll see the QuickAction:

Add Breakpoint to every member in class

4
добавлено
@Salim Там - много различных, JetBrains dotTrace и Красные МУРАВЬИ Ворот - несколько примеров. Обратите внимание на то, что техника, которую я описал, будет только работать в способе инструментовки (где каждый вход метода зарегистрирован), а не в profiler' s Выборка Способа, который может не включать определенные методы, если они были только выполнены за очень короткий период времени.
добавлено автор Omer Raviv, источник
есть ли какие-либо профилировщики, которых можно предложить?
добавлено автор Salim, источник

Можно использовать Систему. Диагностика. Отладчик. Разрыв() на входе в ваш метод.

Что-то вроде этого, возможно, с bool, который вы устанавливаете в объеме?

#if DEBUG
  if (BreakPointEveryMethod)
    System.Diagnostics.Debugger.Break();
#endif

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

1
добавлено

I think you create an 'aspect' for it using a tool like: postsharp

Аспектно-ориентированное программирование позволяет вам добавлять код к началу или концу каждого метода (через шаг постобработки). Таким образом, это тривиально, чтобы добавить линию:

 System.Diagnostics.Debugger.Break()

к каждому методу (на самом деле не редактируя весь ваш исходный код). Более как правило, это используется, чтобы добавить заявления регистрации началу каждого метода как: "Входя в метод DrawLine (x=30, y=80, z=12)" и в конце метода: "Оставляя метод DrawLine (x, y, z)". Который делает после потока вашей программы легкий

0
добавлено
интересный. Я изучу его.
добавлено автор Gero, источник

Вот быстрый и грязный способ сделать, он, используя простой текст заменяет:

  1. Format your C# file so that all of the indentations are lined up. You can do this in Edit > Advanced > Format Document
  2. Open up text replace with Ctrl+H
  3. Set the "Text to Find" field this "^ {".
  4. Set the "Replace" field to this " {System.Diagnostics.Debugger.Break();"
  5. Click the little "Use Regular Expressions" button in the window
  6. Click "Replace All" or hit Alt+A
  7. If your file has any classes with nested enums, classes, or structs, you'll have some compiler errors. Remove the Debug calls from them until your code compiles. If your nested classes have their own methods, you'll have to run this process again with more tabs in the replace strings.

Как это работает: Это использует средство форматирования документа Visual Studio и предполагает, что все методы в файле начинаются с двух счетов и затем "{". Таким образом, любая линия, которая начинается с двух счетов и "{" будет заменена теми же самыми двумя счетами, то же самое "{", и требование к Отладчику.

Если ваш файл вложил enums и т.д., вы получите ошибки компилятора, потому что текст заменяет, не различает между методами и enums. Например, вы будете видеть это:

enum MyColors
{ System.Diagnostics.Debugger.Break(); //error here
    Red,
    Green,
    Blue,
}

Если вы хотите способность отключить эти точки останова, лучшим способом, которым я могу думать, является простой bool. Где-нибудь в вашем коде, вставьте это:

#if DEBUG
        private static bool _ignoreDebug = false;
#endif

(Я поместил #if ОТЛАДКУ там как флаг, что этот код только для отладки. Это не необходимо), Тогда в шаге № 4 выше, используйте эту строку замены вместо этого:

"        {if(!_ignoreDebug){System.Diagnostics.Debugger.Break();}"

Тогда, когда вы поражаете точку останова и не хотите совершать нападки больше в часах, окно печатает это и совершает нападки, входят _ignoreDebug = верный . Чтобы снова включить его, необходимо будет вставить ручную точку останова где-нибудь, у которой есть доступ к _ignoreDebug bool.


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

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot