Instructor
Есть ли возможность быстро проверить, есть ли агрумент в списке агрументов, без анализа на вхождение в результате от GetArgLine?
GetArgValue со значением по умолчанию всё-таки возвращает значение, и непонятно, был ли там аргумент этот или нет. Хотелось бы иметь возможность анализа, и, в зависимости от этого, писать логику. Т.е. хотелось бы иметь метод, т.к. перед этим вызывался GetArgValue, и все параметры собственно уже были считаны и разобраны.
var nArgValue=AkelPad.GetArgValue("ArgName", undefined);
if (nArgValue == undefined)
WScript.Echo("Not defined");
else
WScript.Echo("Defined");
Posted: Thu Oct 04, 2012 6:28 pm
by KDJ
Instructor
Oh, really. Sometimes I forget about the basic things.
Posted: Thu Oct 04, 2012 9:16 pm
by VladSh
Instructor
Интересная возможность, прямо "из коробки" Спасибо!
Posted: Sun Oct 14, 2012 8:30 pm
by FeyFre
Напишу сюда:
Просьба Инструктору, ну или всем желающим/имеющим возможность проверить насколько проворно подхватывает Microsoft Visual Studio(любых версия которые есть в наличии) скрипты, и как хорошо работает вахта, точки останова и прочая функциональность. (У меня почему-то только MSVS 7.0 ведет себя адекватно. 8.0 и 9.0 цепляются но будто бы оглохли,... но в чем причина предположить не могу ибо запускаются на отличной от 7.0 системе)
Posted: Mon Oct 15, 2012 6:51 am
by DV
FeyFre
А как это сделать? Как задать такую точку останова, чтобы Студия на неё среагировала? И что такое "вахта"?
Posted: Mon Oct 15, 2012 8:28 am
by FeyFre
DV
Вахта, оно же дозор, оно же, внезапно, watch.
watch - это такая услуга среды отладки, которая позволяет инспектировать рабочие данные налаживаемого объекта: значения переменных а также элементарных выражений. По объективным причинам Вахта работает исключительно во время отладочного останова. Разделяют четыре вида вахты(и то по внешнему виду, суть одна и та же): классическая-ручная вахта, собственно везде она так и называется watch - программист обязан самостоятельно выбрать данные которые нужно отобразить, вахта автоматическая и локальная(Autos, Locals) отображают данные с которыми оперирует команда и значения доступные текущей области видимости соответственно(если конечно такие понятия доступны в технологии отладки), ну и последняя - мониторинг памяти в сыром виде(разработчик указывает адрес и среда отображает порцию данных как они лежат в памяти побайтово(некоторые среды позволяют приводить к другим базовым типам: слова, плавающие и пр), если такая технология предусмотрена отладкой(первый тип вахты в сыром виде).
1. Этот пункт нужен если по какой-либо причине JIT отладка скриптов отключена. Если она включена то JIT автоматически запустит студию.(JIT настраивается внутри каждой студии независимо, так что можете иметь 4 студии и JIT даст Вам выбрать в какой отлаживаться) Нужно студию подцепить к процессу в котором выполняются скрипты. Делается это также как и подцепиться к нативной отладке уже существующего процесса:
1) Запускаем AP
2) Запускаем студию
3) Идем в меню Debug выбираем пункт Attach to.../Processes (по ходу сориентируетесь)
4) Находим в списка нашу жертву
5) Выставляем тип отладки - скрипты(другие типы обязательно снять, на всякий случай), и жмем кнопку Attach/Debug
Студия немножко подумает и либо матернется что что-то пошло не так, либо молча успешно вцепится.
2. Как задать точку останова - вопрос хитрый. Не инвазивного в отлаживаемый скрипт метода я пока не знаю. Инвазивный такой:
1) Грязный метод. В коде скрипта кидаем какой-нибудь исключение. Запускаем скрипт, студия его ловит - мы в дамках. Но это конец скрипта, ибо пошагать мы не сможем, а не отловленное исключение будет поймано плагином и автоматически завершит скрипт. Подходит лишь для недоделанных скриптов на этапе разработки.
2) Воспользуемся документированным в ECMA262 финтом(12.15). А именно оператором debugger; Ставим его в начале скрипта и пускаем скрипт. И наблюдаем как всплывает JIT(выбираем студию), либо если уже вцепились - студия открывает текст нашего скрипта и показывает останов на этом операторе. Теперь мы можем преспокойно по наставлять точек останова, вахту, прошагать сколько нужно, ну и далее по списку.
Posted: Wed Oct 24, 2012 11:31 am
by VladSh
Ещё немного по определению позиции ошибки в коде.
Запуск такого скрипта
var arr = new Array(3,5);
WScript.Echo(arr.indexOf(5));
даёт такое сообщение
Scripts плагин wrote:Скрипт: C:\Program Files\AkelPad\AkelFiles\Plugs\Scripts\test.js
Строка: 2
Символ: 1
Ошибка: Объект не поддерживает это свойство или метод
Posted: Wed Oct 24, 2012 12:40 pm
by Infocatcher
VladSh wrote:даёт такое сообщение
Если запустить через wscript.exe, сообщение будет точно такое же. Так что вряд ли плагин тут может что-то сделать.
Infocatcher
Это я пробовал в первую очередь, но пытаясь indexOf завести дошёл и до такой жизни, как "new Array"
Posted: Wed Oct 24, 2012 2:22 pm
by Infocatcher
VladSh
Да там вообще логика за гранью моего понимания: в IE9 есть и Array.prototype.indexOf(), и JSON.parse()/stringify(), даже Object.create() есть, но вот в WSH ничего этого нет.
Posted: Fri Oct 26, 2012 7:38 am
by Fr0sT
Кмк, они забили на развитие WSH в пользу Павершелла
А indexOf у Array вообще нигде в спеках не указан.
Posted: Fri Oct 26, 2012 7:49 am
by DV
Fr0sT wrote:А indexOf у Array вообще нигде в спеках не указан.
"полноценный" JavaScript какой версии? Знаете, их там тоже десяток, как и JScript.
Собственно в чем проблема? Прямо написано какую версию EcmaScript реализовано в конкретных версиях JScript. Весь JScript до версии поставляемой с IE9 приблизительно соответствует JavaScript 1.5, т.е. EcmaScript 3rd edition. indexOf и иже с ними появились в пятой редакции(см. Annex E.15). Так что возможно стоит писать максимально совместимо с интерпретатором для которого пишете, а не со стандартом который лежит в основе. Тем более что задачи сделать переносное на другой интерпретатор не стоит.