gifts2017

Отладка кода в режиме отладки без перезагрузки клиента

Опубликовал Владимир Чаклин (vec435) в раздел Программирование - Практика программирования

Позволяет многократно выполнять отлаживаемый код непосредственно в режиме отладчика не перегружая клиента

Иногда достаточно изменить 1-2 строки кода.Но для проверки всегда нужно перегрузить клиента и выполнить код заново. Можно конечно воспользоваться какой-нибудь консолью кода,выложенной на сайте, и отлаживать код в ней. Но для получения конечного результата нужны переменные исходного модуля. Есть еще замечательная функция Ду (на Мисте автор Гений 1С) ,куда можно передать переменные. Но код там нужно писать от руки , что непросто для большого куска. А если использовать буфер обмена Windows? То получится функция ДуБуфер, где код берем из буфера, описываем и присваиваем ему переменные и на выходе - результат выполнения измененного кода. Иными словами порядок работы таков

1) в отладчике поставили точку останова после отлаживаемого кода, т.е. видим результат его выполнения

2) изменили кода

3) скопировали код в буфер

4) в строке описали через параметры функции все необходимые входящие переменные, которые используются в отлаживаемом коде но назначаются не в нем (пример в функции)

5) так же в строке описали через параметры функции все исходящие переменные, результат которых мы хотим увидеть

6) вызвали функцию ДуБуфер - и увидели на выходе результат выполнения изменного кода

7) если результат не устраивает- повторили пункты 2,3,4,5,6

Разукрашка кода http://infostart.ru/public/19856/

 


//вызов на картинке

// ДуБуфер(,"п0=вых;","инит=п1;","",инит)[0]

//на рисунке "пример вызова для части кода" пример вызова с несколькими параметрами
//модульрпчв.ВО().ДуБуфер(,"п0=вых;п1=сч;","инит=п2;выборка=п3;","","",инит,выборка)[0]

 

   
   Функция ДУбуфер(ВернутьМассив=неопределено, СписокПараметрыИсходящие,СписокПараметрыВходящие="",П0=Неопределено, П1=Неопределено,  П2=Неопределено, П3=Неопределено, П4=Неопределено,П5=Неопределено)  Экспорт

   
Код=GetClip();
   
мас= Новый Массив(6);

    Если
найти(код,"дубуфер")<>0 Тогда мас[0]="зацикленная ссылка в коде"; возврат мас; КонецЕсли;
   
исходныйКод=Код;
   
исполняемыйКод=СписокПараметрыВходящие+символы.ПС+Код+символы.ПС+СписокПараметрыИсходящие;
    Попытка
        выполнить
исполняемыйКод;
    Исключение
       
оО=описаниеОшибки();
       
мас[0]=оО+символы.пс+исполняемыйКод; возврат мас;
    КонецПопытки;

    Если
П0<>Неопределено Тогда мас[0]=п0; КонецЕсли;
    Если
П1<>Неопределено Тогда мас[1]=п1; КонецЕсли;
    Если
П2<>Неопределено Тогда мас[2]=п2; КонецЕсли;
    Если
П3<>Неопределено Тогда мас[3]=п3; КонецЕсли;
    Если
П4<>Неопределено Тогда мас[4]=п4; КонецЕсли;
    Если
П5<>Неопределено Тогда мас[5]=п5; КонецЕсли;
    Если
ВернутьМассив<>неопределено Тогда ВернутьМассив=мас; КонецЕсли;
    Возврат
мас;
КонецФункции
Функция  
GetClip() Экспорт
   
strTXT="";
   
objHTM=Новый COMОбъект("htmlfile");
   
strTXT=строка(objHTM.ParentWindow.ClipboardData.GetData("text"));
    возврат 
strTXT
КонецФункции

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Старых (tormozit) 05.03.12 19:54
2. Владимир Б (antares_of) 07.03.12 11:36
Отладка без перезагрузки клиента, это нужная вещь, попробуем)
3. Дмитрий Ташланов (Necytij) 07.03.12 21:34
Интересная очень идея. И очень бы хотелось иметь такой инструмент, чтобы можно было отладку кода проводить "онлайн", как в интерпретаторах, но, честно говоря, мне кажется это подойдет только для мелкой рихтовки кода, когда сомневаешься в небольшой части кода, а так описывать даже 15-20 входящих переменных слишком накладно. Это ладно, если еще сам список во время отладки меняться не будет - 1 раз написал список входящих и копируешь опять же хоть из текстового редактора, но в полевых условиях собирать такую строку не очень удобно.
имхо, широкого применения обработка иметь не может. Но большое спасибо топикстартеру за ссылку на f ДУ... почитал, обогатился.
4. Владимир Чаклин (vec435) 11.03.12 15:52
(3) Necytij, действительно описывать множество переменных неудобно и отлаживаться можно частями, прописывая переменные в каждую часть. но 1)код-описание !временно! можно писать прямо в модуле 2) выложу обработку, где будет выгружаться код и переменные . через обработку будет удобнее отлаживать большие куски
5. Владимир Чаклин (vec435) 11.03.12 16:13
(3) Necytij, да и описывать нужно либо те переменные которые хочешь получить на выходе либо те которых нет в изменном коде .зачем 15-20 переменных?
6. Геннадий Николаев (genayo) 12.03.12 14:42
Интересно, будем посмотреть...
7. Сергей Старых (tormozit) 12.03.12 16:38
Тем, кому идея действительно интересна и кто не боится объединить конфу с другой, рекомендую ИР http://infostart.ru/public/15126/
Там есть мощная консоль кода, которую можно вызывать во время отладки функциями Оп, Опс и др.
8. Галина Ивлева (galinka1c8) 12.03.12 22:03
Интересная идея. Для отладки пригодится. Очень часто приходится менять что-то по мелочи, а не большие участки кода.
9. JER MARK (JER_MARK) 13.03.12 06:48
Речь идет про 8-ку. Насколько я знаю, если вы не меняли структуру базы (новый справочник, реквизит и т.д.), то изменив кусочек кода, можно обновиться динамически не выгоняя пользователей.
10. Владимир Чаклин (vec435) 13.03.12 08:13
(9) JER_MARK, можно обновиться динамически, но с функцией можно проверить изменный вариант тут же не обновляясь
11. Владимир Чаклин (vec435) 14.03.12 10:25
(7) tormozit, В авторитете платформы ИР нет сомнений. Вещь необходимая любому разработчику. Но ,насколько я понял, передать в функции ОП,ОПС можно только определенный код, а не код из буфера.
12. Сергей Старых (tormozit) 14.03.12 12:45
(11) ИР не платформа, а подсистема. По поводу автоматической вставки из буфера в случае открытия консоли кода (Оп, Опс и т.д.) кажется что это не такая уж и полезная "фича". Нажать CTRL+V в открывшемся окне большого труда не составляет. В твоей ДуБуфер эта "фича" действительно полезна, т.к. все делается неинтерактивно. В ИР есть еще Ду, но она скромнее, т.к. не позволяет подменять имена. Надо будет ее "проапгрейдить" тоже.
13. Сергей Старых (tormozit) 27.04.12 09:17
В ИР добавлена функция режима отладки Поп()

открытие фрагмента программы в консоли кода - Поп(ТекстПрограммы=), используется путем копирования в буфер обмена целостного фрагмента программы и вычисления "Вычислить(Поп())"

позволяет осуществить предварительное многократное выполнение кода с возможностью внесения изменений на ходу

http://www.youtube.com/watch?feature=player_embedded&v=btGHeiUAWEY#!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа