#c #visual-studio #debugging
#c #visual-studio #отладка
Вопрос:
У меня есть функция с несколькими инструкциями return. Я хочу остановить выполнение моей программы (во время отладки), когда инструкция return вот-вот будет выполнена в этой функции.
Один из способов сделать это — добавить точки останова во все инструкции return, но есть ли другой способ?
Комментарии:
1. Существует также это: https://learn.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-debugbreak может быть, выполнить поиск и заменить return на
DebugBreak(); return
2. Попробуйте установить точку останова на закрывающей фигурной скобке в конце функции. Это работает только в отладочных сборках.
3. Перед завершением функции.
4. если у вас так много инструкций return в одной функции, что установка точек останова для всех из них является рутиной, то, возможно, пришло время провести рефакторинг вашей функции.
5. @pasha: Выводное сообщение здесь заключается в том, что Microsoft потребовалось бы много работы, чтобы добавить такую функцию в Visual Studio, и все же это была бы довольно бесполезная функция, поскольку почти ни одному пользователю эта функция не понадобилась бы. Почти ни у кого нет такого количества возвратов. Главное исключение было бы в сгенерированном коде, и тогда вы бы решали его в генераторе, а не в отладчике.
Ответ №1:
Самое близкое, что вы можете сделать к прерыванию при любом возврате, — это переход (shift f11) от существующей точки останова в функции. Это не позволит вам проверить аргументы возвращаемого выражения, но позволит вам проверить значение, которое фактически возвращается вызывающей функции. Если вам нужно прерваться из запущенной программы, то вам придется добавлять точки останова (либо с помощью IDE, либо вызывая DebugBreak() (или _CrtDbgBreak(), если вы хотите, чтобы они исчезли из сборок выпуска).
Комментарии:
1. Я действительно надеялся, что это не мои единственные варианты.
Ответ №2:
Скорее всего, в ассемблере будет сгенерирован один возврат. Если вы откроете окно сборки и найдете выход функции, вы сможете установить там точку останова.
Комментарии:
1. Но даст ли это мне знать, какая из нескольких инструкций return была выполнена?
2. Отладчик не настолько умен