Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 43

Как узнать глубину стека вызовов?

23.03.2018, 09:56. Показов 2947. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите пожалуйста как узнать глубину стека вызовов?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2018, 09:56
Ответы с готовыми решениями:

Как программно получить список стека вызовов?
Выполняется функция. Я хочу получить список вызовов. Стёк вызовов этой функции. Как это программно сделать?

Переполнение стека вызовов
using System; using System.Collections.Generic; namespace Lists { /// <summary> /// Позволяет выводить на экран строковые...

Как узнать глубину рекурсии?
Подскажите пожалуйста как узнать глубину рекурсии? Нужно узнать глубину рекурсии может кто помочь? #include<math.h> ...

7
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
23.03.2018, 16:42
Lua
1
2
3
4
5
6
7
8
9
10
11
local step = 0
 
function recurse()
 
    step = step + 1
    print( step )
    recurse()
 
end
 
recurse()
На моем компе переполнение стека случилось после 65471-й итерации.
1
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
23.03.2018, 17:05
Стоит посмотреть на модуль debug.
0
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 43
23.03.2018, 17:53  [ТС]
Спасибо за ответы.
Цитата Сообщение от vantfiles Посмотреть сообщение
переполнение стека
Имелось ввиду глубину стека в конкретный момент в процессе работы скрипта
Цитата Сообщение от NoMasters Посмотреть сообщение
модуль debug
Да, смотрел. К сожалению безрезультатно.
Пользуюсь debug.traceback() при ошибках (печатает весь стек)
Но как узнать глубину так и не понял.
Гугление тоже не помогло(
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
24.03.2018, 09:29
Поясните, пожалуйста, для чего это вам нужно.
Может быть вы имеете в виду - как определить количество параметров на стеке при вызове луа-функции?
0
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 43
24.03.2018, 10:47  [ТС]
Хочу сделать лог с отступами, пропорциональными глубине стека. Чтобы вот для такого примера:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function foo()
  log("foo")
  bar()
end
function bar()
  log("bar")
end
function log(str)
  local depth -- получаем глубину стека вызовов
  local indent = string.rep("  ", depth) -- вычисляем отступ
  print(indent .. str)
end
 
log("main")
foo()



получить вот такой вывод:
C++
1
2
3
main
  foo
    bar
Вот эта штука https://www.lua.org/manual/5.3... lua_gettop , кажется, должна делать что мне надо.
Но я не знаю как этим пользоваться

в zerobrain
print(lua_gettop) выдает nil
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
24.03.2018, 12:36
Лучший ответ Сообщение было отмечено linuxdesk как решение

Решение

Цитата Сообщение от linuxdesk Посмотреть сообщение
print(lua_gettop) выдает nil
ну ещё бы, это же C api, а не функция lua.

Eсли debug.traceback не устраивает, приводить результаты в желаемый вид придётся руками.
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function get_stack()
    local i = 1
    return function()
        i = i + 1
        return debug.getinfo(i)
    end
end
 
function foo()
    for frame in get_stack() do
        print(frame.what, frame.name)
    end
end
 
function bar()
    foo()
end
 
bar()
2
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 43
24.03.2018, 15:35  [ТС]
NoMasters, благодарю!
Lua
1
2
3
4
5
6
7
function get_stack_depth()
  local i = 1
  while debug.getinfo(i) do
    i = i + 1
  end
  return i - 3
end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2018, 15:35
Помогаю со студенческими работами здесь

Как программно узнать глубину цвета изображения?
как программно узнать глубину цвета Bitmap??

Что это за код вызывается из стека вызовов?
А что это за код, приличный массив кода, который вызывается из стека вызовов?

Как узнать адрес стека FPU
в отладке программы хотелось бы взглянуть на стек fpu, как это сделать? NASM

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

Как узнать раскладку клавиатуры? Как её изменить? Как узнать, на каком языке текст в файле?
сабж


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru