13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418

Как проще всего узнать вложенность на стеке

11.05.2022, 09:40. Показов 1117. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я переписал рекурсивную функцию и хочу убедиться, что алгоритм не вылетет со StackOverflowException. Есть ли простой способ узнать максимальную глубину вызовов?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.05.2022, 09:40
Ответы с готовыми решениями:

Как проще всего подключиться к Wi-Fi?
Меня интересует существование что-то вроде такого: SSID = "Имя wifi" Password = "12345678" Т.е. уже в коде я написал имя сети и...

Как проще всего нарисовать прямоугольник?
Как проще всего нарисовать прямоугольник, закрашенный символом '*', используя 2 цикла for, один из которых вложенный . Спасибо!

Как проще всего соединить 2 ноутбука?
Как проще всего соединить 2 ноутбука между собой для передачи файлов? Вот только чтобы с флешкой не носиться. Я пробовал создавать Новое...

9
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
11.05.2022, 10:08
Aycon, чтобы не бояться StackOverflowException надо вообще избегать рекурсии. Или в своём алгоритме ограничить глубину, но это полумера.

Цитата Сообщение от Aycon Посмотреть сообщение
Есть ли простой способ узнать максимальную глубину вызовов?
Зачем? Что это вам даст? Глубина зависит от того, как сильно ваш алгоритм расходует место выделенное под стек. Или вы спрашиваете о какой-то настройке вида "max recursive calls"?
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
11.05.2022, 10:47  [ТС]
Usaga, ну вот я переписал один раз функцию неправильно, оказывается она неявно ввзывала себя. Я отловил это случайно. Я могу например поставить точку останова если в стеке больше 20 фреймов после main?
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
11.05.2022, 10:49
Цитата Сообщение от Aycon Посмотреть сообщение
Я могу например поставить точку останова если в стеке больше 20 фреймов после main?
Нет) Вы можете получить Exception.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
11.05.2022, 11:02
Цитата Сообщение от Aycon Посмотреть сообщение
Есть ли простой способ узнать максимальную глубину вызовов?
Стек ограничен размером, а не глубиной вызовов напрямую.
Для 64-битных .NET-приложений он равен 4 Мб, для 32-битных - 1 Мб.
Конкретная глубина будет зависить от алгоритма. Обычные рекурсивные алгоритмы, если в них нет ошибки, вылетать не должны.

Добавлено через 54 секунды
Да, и размер стека можно менять при компиляции, но что-то мне подсказывает, что тут не нужно городить такие костыли
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
11.05.2022, 11:08
Лучший ответ Сообщение было отмечено Aycon как решение

Решение

Цитата Сообщение от Aycon Посмотреть сообщение
например поставить точку останова если в стеке больше 20 фреймов после main
C#
1
2
3
4
5
6
#if DEBUG
        if (new StackTrace().FrameCount > 20)
        {
            //breakpoint
        }
#endif
Но это только для для отладочных целей, или для анализа каких-то особых исключений и логирования.

Не стоит использовать это для реализации логики метода. Если уж совсем никак не отказаться от рекурсии в конкретном алгоритме и нужно контролировать максимальную вложенность, то лучше реализовать это через явную передачу параметра с уровнем вложенности.
1
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
11.05.2022, 11:11  [ТС]
Usaga, о каком исключении вы говорите? Я имею в виду поставить точку останова, чтобы прогнать алгоритм и убедиться, что в стеке не накопится больше 20 вызовов

Добавлено через 38 секунд
kotelok, спасибо большое, именно это я и искал)

Добавлено через 2 минуты
tezaurismosis, да, я знаю, благодарю. Проблема в том, что мне лень степать по алгоритму отлавливая вызовы. Это может занять много времени
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
11.05.2022, 11:11
Цитата Сообщение от Aycon Посмотреть сообщение
именно это я и искал
Теоретически, вот это вот new StackTrace().FrameCount > 20 можно вписать в параметры точки останова (правый клик в точку, 'conditions'). Однако, у меня Студия, почему-то, на таких условиях не останавливается.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
11.05.2022, 11:14  [ТС]
kotelok, вообще шикарно, спасибо!)

Добавлено через 1 минуту
kotelok, возможно, студия создаёт новый стектрейс каждый раз проходя через точку останова?
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
11.05.2022, 15:16
Цитата Сообщение от Aycon Посмотреть сообщение
возможно, студия создаёт новый стектрейс каждый раз проходя через точку останова
Оно и должно каждый раз новый экземпляр создавать. Но, видимо, экземпляр создаётся относительно контекста отладчика, а не относительно того метода, где установлена точка остановки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2022, 15:16
Помогаю со студенческими работами здесь

как проще и удобней всего организовать?
Приветствую! Есть игра: labwar.ru делаю на подобии её игру! Там система боя такая, опишу в кратце: Позиции 0/20, для атаки в...

Как проще всего понять массивы?
Такая проблема, учусь на первом курсе, язык C++ изучаю. Но как только дело дошло до массивов, так обучение встало. С указаниями препода за...

Как проще и эффективнее всего изучать C++?
Здравствуйте. Знающие, подскажите пожалуйста, как проще и эффективнее всего изучать C++? Вообще, по сути, C++ это улучшенный C, и C с...

Как проще всего сделать рисунок в С++?
Здравствуйте. У меня есть данные, которые я хочу представить графически, после чего закинуть их в уже созданный пользовательский интерфейс....

Как проще всего сравнивать даты?
день добрый! есть необходимость сравнения дат из бд. на данный момент формат такой - "год-месяц-день, часы:минуты". ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru