StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Здесь обсуждается всё, что касается макросов.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

Latest post of the previous page:

citRiks wrote: Fri 26 Feb, 2021 10:02посмотрите сейчас:
https://github.com/dr-dba/far-lua-diagnostics
обновлено вместе с:
https://github.com/dr-dba/far-lua-general-utils
В начале файла StackTracePlusPlus-@Xer0X.lua в разделе ЗАВИСИМОСТИ не приведена ссылка на модуль LuaExplorer-@Xer0X.Lua. А только на исходный:
Теперь при испытании теста test_isolated_macro_stack.lu_a из внешней по отношению к Фару папки хорошо проявляется последовательность переходов между traceback-закладками. Я туда ещё несколько добавлял, и всё хор.

В т.ч. посмотрел работу traceback-закладок на свежем скрипте PassGenerate.lu_a (опубликован здесь), перемещённом в C:\tmp\ из "родной" папки. Расставил в нём 10 закладок: 4 по коду скрипта от начала файла до MenuItem, 2 в MenuItem, и по 2 в каждом из двух Macro.

– при загрузке скрипта посредством Editor_MacroCheck по Reload One проявились первые 4 закладки в последовательности 4, 3, 2, 1 (потому что окна EXEC/E.tbl_dbg_stack.0>.1>.2>.3>.4|CUR> (6) так наслоились);

– при вызове MenuItem через Меню плагинов проявились закладки в последовательности 5 и 6;

– при вызове ключом первого макроса проявились закладки в последовательности 7 и 8;

– при вызове ключом второго макроса проявились закладки в последовательности 9 и 10;

т.е. все расставленные закладки сработали.

Между прочим: титульная запись в dbg-окнах для пользователя выглядит как загадочный ребус.

Остальное (изложенное в следующем Вашем посте) пока что не успел посмотреть.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by citRiks »

за проверки спасибо, добавил про зависимости упоминание
Ann wrote: Fri 26 Feb, 2021 15:40 Между прочим: титульная запись в dbg-окнах для пользователя выглядит как загадочный ребус.
я довольно уверен что там много чего выглядит как ребус,
но ничего лучше не придумал, там еще и компактность нужна ведь.
"/Е" - означает что это вылезло в результате exception/error
"/D" - означает что вызвано из кода специально для Diagnostics

Сейчас пока нет возможности писать справку,
я лишь еще раз напишу тезисно для вас лично,
чтобы вы могли проверять или пользоваться:
* все "обычные" функциональности ЛуаЭксплорера,
которых много полезных.
* открывается на месте (строке) вызова конечно,
это еще показывает "\CUR" в заголовке.
* все локальные (LCL) и верхних уровней (UPV) переменные
* вся информация о всех функциях стека (INF)
* Enter - зайти в таблицу (обьект)
* BackSpace - выйти из таблицы(обьекта) обратно, в ее "родителькую".
* Escape - закрывает все совсем.
* на самом верхнем уровне, есть еще информация,
ползеным например может быть то что там есть тот же стек,
но не иерархический, а просто в плоском массиве, сохраняя очередность конечно
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by citRiks »

buniak_a_h wrote: Thu 25 Feb, 2021 07:39 Т.е. добавлением минуса. Это заметнее
P/S. А собственно макрос удобнее выключать заменой Macro на NoMacro. У этого способа ещё плюс, что работает синтаксический контроль.
я люблю пробелы, потому что я сравниваю файлы сравниваю файлы с игнорированием пробелов,
т.е. мне наоборот специально чаще всего не надо чтобы сравнивалка кричала об различиях,
там где я считаю что их нет.
это долго обьяснять зачем и почему, да и по сути вы правы,
есть и недостатки в том как я делаю
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by John Doe »

citRiks wrote: Fri 26 Feb, 2021 12:15 John Doe, на всякий случай, чтобы было понятнее откуда берется этот обьект
вреда не будет в любом случае
Вред быть вполне может.
1. В современном луа создавать что-то _G неявным образом считается дурным тоном.
Это значит что библиотека Xer0X может быть вовсе не там (не смотрел как на самом деле организованно)
2. Адресуя что-то через _G явным образом вы теряете возможность подставить эту библиотеку иным способом (setfenv).
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by citRiks »

John Doe wrote: Fri 26 Feb, 2021 17:34Вред быть вполне может.
1. В современном луа создавать что-то _G неявным образом считается дурным тоном.
Это значит что библиотека Xer0X может быть вовсе не там (не смотрел как на самом деле организованно)
да я и не использую эту приставку, только в крайних случаях и для наглядности
проще написать людям "_G.Whatever" чем писать "Это глобальная таблица/обьект Whatever".
Далее, вы можете сказать справедливо вобщем,
что "не нужны никакие глобальные обьекты",
но иногда я думаю что все же лучшее и удбнее чтобы по крайней мере один такой был.
Вот в ФАРе, есть же глобальные far, Far, Editor, итд? :) Вот то-то и оно.
Далее, что не библиотеку или envioronment взять, хоть тот же PenLight,
хоть еще что, так они все безбожно лезут в глобальное пространство.
Так что тон может и дурной, но все им пользуются.
John Doe wrote: Fri 26 Feb, 2021 17:342. Адресуя что-то через _G явным образом вы теряете возможность подставить эту библиотеку иным способом (setfenv).
ну когда понадобиться, то будет несложный рефакторинг
Last edited by citRiks on Fri 26 Feb, 2021 17:49, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

citRiks wrote: Fri 26 Feb, 2021 17:37Ann, киньте мне этот PassGen с вашими закладками
.
я проверю как там что наслаивается
А наслаиваются, как я и писал, окна:
при загрузке скрипта посредством Editor_MacroCheck по Reload One проявились первые 4 закладки в последовательности 4, 3, 2, 1 (потому что окна EXEC/E.tbl_dbg_stack.0>.1>.2>.3>.4|CUR> (6) так наслоились);
Т.е. не все закладки в одном окне отображались, а каждая закладка в отдельном окне.

И это вызвало у меня, возможно чисто дилетантское, подозрение, что при загрузке файла МакроЧек проверяет не весь файл в целом, а только "базовую" часть скрипта, без функций MenuItem и Macro. Иначе бы, по моей логике, он бы показал все 10 закладок, а не 4.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

citRiks wrote: Fri 26 Feb, 2021 10:11
Ann wrote: Thu 25 Feb, 2021 13:33 Для тестирования макросов было бы удобно, чтобы МакроЧек мог бы временно отключать и затем включать все макросы, кроме находящихся в определённой папке, расположенной в т.ч. и за пределами %FarProfile%\Macros\scripts\
Частичный ответ для вас есть в этих двух функциях,
которые можно вызывать отдельно, и как угодно:
_G.Xer0X.fnc_macro_dir_load("<a-directory-with-file-macros>")
_G.Xer0X.fnc_macro_one_load("<a-file-macros-path>")
и можно сделать самому что-то вроде:
lua:Xer0X.fnc_macro_one_load([[c:\aaa\bbb\ccc.lua]])
или для целой директории:
lua:Xer0X.fnc_macro_dir_load([[c:\aaa\bbb]])
Результаты моих .
"убавиться" макрос только если у него в самом файле есть нейтрализация.
Относительно несложно доделать удаление безусловное, но..
Вот честно, как часто и зачем вам приходится загружать-выгружать директории?
Не часто. Но это очень востребовано, когда нужно найти скрипт, мешающий работе другого скрипта. В моей практике подобный случай был совсем недавно. И в год подобное бывает по нескольку раз. И обычно не равномерно по году распределяется, а "кучками".

И приходится тогда перебрасывать папки со скриптами за пределы Фара и обратно. А это ситуация относительно стрессовая. И часто длительная. Понятно, что для этого делается специальная тестовая копия Фара, в неё копируются все дееспособные скрипты и т.д., и т.д.

И вот если бы можно было отключать макросы скопом, а потом возвращать их в строй и папками, и по одиночке, физически не трогая сами файлы, то это был бы существенный прогресс. Вот я к чему эти вопросы и поднимаю.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by buniak_a_h »

Ann wrote: Fri 26 Feb, 2021 22:14 И вот если бы можно было отключать макросы скопом, а потом возвращать их в строй и папками, и по одиночке, физически не трогая сами файлы, то это был бы существенный прогресс
Сделайте макрос на основе
При необходимости удаляйте-добавляйте папки в список - и будет Вам щястие вечное-бесконечное!
Last edited by buniak_a_h on Fri 26 Feb, 2021 22:23, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

buniak_a_h wrote: Fri 26 Feb, 2021 22:21При необходимости удаляйте-добавляйте папки в список
По любому спасибо, потому что полезно. Но, правильно ли я понимаю, что это, всё-таки, полумера? Т.е. для поиска "англичанки, которая гадит" сначала всё же нужно будет перенести все применяемые макросы и модули за пределы %FarProfile%\Macros\ и лишь потом поэтапно применять Reload macros?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by buniak_a_h »

Ну да, один раз вынести из %FarProgile%\macros\scripts придётся. Но один раз! А если не потребуется выборочная загрузка, то в ярлыке для ФАРа сможете указать параметр m:
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

buniak_a_h wrote: Fri 26 Feb, 2021 23:00Ну да, ... придётся. Но один раз!


upd: убрал картинку под спойлер, чтобы не перетягивала на себя внимание от темы.
Last edited by Ann on Sat 27 Feb, 2021 06:46, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Shmuel »

Можно ничего и не выносить. Перейти в %farprofile%\Macros\scripts и оттуда выдавать команды по очереди (имена папок как у меня реально):
lm:load Shell
<проверяем>
lm:load Common
<проверяем>
.....
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by citRiks »

Ann wrote: Fri 26 Feb, 2021 22:14 ..
lua:_G.Xer0X.fnc_macro_one_load("C:\\tmp\\test_isolated_macro_stack.lua") – вызывает ошибку:
...
пардон, в этом случае первый параметр должен быть НИЛь:
Xer0X.fnc_macro_one_load(nil, [[c:\aaa\bbb\ccc.lua]])
для понятности и справки вот функция:

Code: Select all

Xer0X.fnc_macro_one_load = function(mcr_info, mcr_path)
	mcr_path = far.ConvertPath(mcr_path, 1)
	Xer0X.fnc_mcr_src_all_clean(mcr_path)...
там логика такая, что макрос может быть загружен и как таблица "mcr_info",
впрочем я не вижу сейчас чтобы этот первый параметр вообще использовался,
поэтому пусть пока будет просто НИЛь, а может когда-нибудь наверное будет использоваться.
И оказывается что для безусловного удаления макроса уже есть функция которую можно дать:
lua:Xer0X.fnc_mcr_src_all_clean([[c:\aaa\bbb\ccc.lua]])
Last edited by citRiks on Sat 27 Feb, 2021 01:20, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

Shmuel wrote: Fri 26 Feb, 2021 23:21
Попробовал среди прочих в т.ч. так: lm:load vie_lua – действительно грузятся макросы из указанной папки, а все остальные выгружаются.

Этак гораздо удобнее. Спасибо.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Post by Ann »

citRiks wrote: Sat 27 Feb, 2021 01:19 в этом случае первый параметр должен быть НИЛь:
Xer0X.fnc_macro_one_load(nil, [[c:\aaa\bbb\ccc.lua]])
Да, так работает: lua:Xer0X.fnc_macro_one_load(nil,[[C:\tmp\PassGenerate.lu_a]])
И оказывается что для безусловного удаления макроса уже есть функция которую можно дать:
lua:Xer0X.fnc_mcr_src_all_clean([[c:\aaa\bbb\ccc.lua]])
И так тоже работает: lua:Xer0X.fnc_mcr_src_all_clean([[C:\tmp\PassGenerate.lu_a]])

Спасибо!
Post Reply

Return to “Обсуждение макросов”