место в рейтинге
  • 268868
  • 5499
  • 198
Нравится блог?
Подписывайтесь!

Псевдо-отладочный режим...

Небольшой хак... возможно пригодится кому...

 

В общем, в который раз уже за последние годы, отлаживал сегодня форму отчета в очередной программе. Завтра ехать к заказчику, показывать, и пришла мысль, а как бы сделать так, чтобы на компьютере заказчика можно было программу "вгонять" в режим отладки, например, не выводить форму на печать, а переходить в режим просмотра, без дополнительной кнопки и вообще, переключать некоторые функции программы в "девелоперский" режим? Родился вот такой хак:

.......

if FileExists(ExtractFilePath(Application.ExeName)+'admin.txt') then
RepForm.RasOrder.Preview else RepForm.RasOrder.Print;

.....

if FileExists(ExtractFilePath(Application.ExeName)+'admin.txt') then SecretButton.Visible:=true;

Т.е. приходим к заказчику, запускаем прогу, он ее тестирует. Если возникли какие-то баги, то создаем в каталоге программы файл с именем admin.txt  и перезапускаем ее. И в первом случае уже можно посмотреть отчет в превью, без печати и траты бумаги, а во-втором случае у нас появляется "волшебная" кнопка, на которую можно повесить например вывод значений каких-то переменных и уже сразу понять что и где пошло не так.

Вот, может быть сумбурно описал, но идея, кажется, понятная.

Ничего сложного кстати, по реализации, просто идея. Надеюсь, пригодится кому...

Анатолий Ремнев remnew
Заноза в половине задниц Казнета (с) С.Неруш
3 марта 2010, 1:10
890

Загрузка...
Loading...

Комментарии

Werser
0
0
Вот вам ещё одна идея, лучше и задаром: передавать параметры в командной строке. "MokryePiski1.exe /debug" и мы в отладочном режиме!
remnew
0
0
все бы ничего, только вот каждый раз запускать прогу из командной строки это не есть удобно...
Человеческий шелл не юзаете?
mingw, msys, а ещё лучше cygwin.
bash ничего так, ускоряет работу в разы.
Я к тому, что там (в отличие от cmd.exe) запустить бинарник не проблема (autocompletion и пр. плюшки есть).
да смысл этой заморочки? MiniGW ставить надо, равно как и CygWin... это лишняя возня на компе клиента... а так - пришел, поставил, что-то пошло не так, создал быстренько файлик и "вошел" в отладочный режим - причем отладчика самого и не надо вовсе, если например, на кнопку повесить лог расчета значений... посмотрел, проверил, удалил файл - все, у заказчика осталась прога без "лишних" кнопок.
А, да я про личный ПК для разработки (про шелл). :)

Ещё можно батник написать который запускает бинарник с отладочным флажком, ну как ещё одно решение. :)
Пишем .bat-файл с одной строкой -- и вуаля!

Почему бы и нет?
да. только вот суть хака в том, чтобы предусмотреть в программе псевдо-отладочный режим на компе без IDE, а способов передать параметр - много, факт =)))
Werser
0
0
Я обычно ярлычок делаю, куда пишу все нужные параметры.
quux
0
0
я тоже за то, что в винде командная строка не так развито используется обычно. проще создать файлик
Запуск приложения с нажатым шифтом, контролом или любой другой кнопкой - вход в отладку.
Не проще чем файлы создавать? :)
remnew
0
0
а сложность кода хука здесь не оценивается? и на каком событии? OnCreate? сказать проще - чем сделать...
Сложности никакой если знаешь винапи хотя бы на 3ку. Я предпочитаю не искать лёгкие пути. Лучше один раз сделать нормально и потом использовать просто и без граблей как у вас.
т.е. по вашему нормально потратить несколько часов на написание и отладку хука системных клавиш для 1-2 раз использования функции, чем использовать банальный велосипед? представляю, сколько времени у вас занимает разработка...
Повторяю, если апи знаешь хотя бы на 3ку то это дело займёт не больше 30 минут. Если же апи не знаешь на 3ку, то и нечего из себя строить программиста. Понаучились в дельфях формы рисовать и уже мнят себя прогерами.
бгг... ну, не я начал... ваше портфолио можно глянуть? а то поначитались "API для чайников" и уже мнят себя гуру программинга...
мой код пишется меньше чем за минуту... в 30 раз быстрее =))))
Мальчик, я когда на асме для бк-10 писал игры, вы ещё в садике горшки искали. Я не хочу меняться пиписьками, но путь от асма (бк-10, zx spectrum, pdp-11, i388), fortran, basic, pascal, delphi, cbuilder, msvc прошел полностью. Так что не надо меня тут строить.
портфолио в студию.. иначе все это слова... у меня тоже стаж дай боже... я тоже вам могу написать много страшных и умных слов...
БК-10(11) видели в юности? Так вот GralSoft который писал софт на БК это был я. В частности гр.редактор vision
это все ваше портфолио?
if FileExists(ExtractFilePath(Application.ExeName)+'admin.txt') then
RepForm.RasOrder.Preview else RepForm.RasOrder.Print;

.....

if FileExists(ExtractFilePath(Application.ExeName)+'admin.txt') then SecretButton.Visible:=true;

Сколько раз надо проверить ситуацию на исключительность, столько раз и происходит FileExists(ExtractFilePath(Application.ExeName)+'admin.txt')?
Не очень то красиво.
А про остальное и так сказали.
remnew
0
0
не понял... о каком эксепшене речь?
quux
0
0
я тоже хотел об этом написать но меня опередили на полгода)
имеется в виду, что чем каждый раз проверять файл на существование (что будет узким местом в нагруженном приложении +гонять головку жесткого диска) лучше в начале один раз проверить и сделать переменнную boolean, которую потом и проверять на тру и фолс
device
0
0
велосипед какой-то корявый
remnew
0
0
изобретите свой
device
0
0
Оставлю это вам, такие велосипеды изобретать с шилом в сидушке.
Вместо того что бы способом передать передать через командную строку, будем создавать файл в папке рядом с ехе, прога конечно работать всегда будет с правами админа, нам же не важна совместимость с Vista и Win7, и конечно же программа никогда не будет запускаться с cd. Вместо того что сделать флаг о отладочном режиме, будем на каждый чих обращаться к жесткому диску , нет слов.
я дождусь вашего хака - а потом покритикую ок? если я знаю в каких условиях будет запускаться программа и делаю этот хак только для себя - на кой хрен мне думать о всем том что вы написали? вы мегакрутой проггер - вам это не интересно, а новичкам будет полезен прием. что за манеры вообще меряться пиписками? давайте пару строк вашего кода с описанием задачи что они решают - я вам также докажу что код - г..но и не стоит вообще такое писать и придумаю кучу условий, при которых работать не будет. или доеб...ся - это дело принципа?
и на кой хрен кому сдались ваши шутеры космические? есть намного лучше реализации, в том числе по графике и по геймплею. изобретаете велосипеды, да еще и попрошайничаете о поддержке на геймдеве... ну как, приятно???
кроме как переходом на личности ответить на критику нечем :)
почему, можем еще пиписьками померятся... я так понимаю - это показатель будет? можно ваше портфолио разработок посмотреть, уважаемый?
да, и пару строк кода с описанием задачи жду - покритиковать хочется... ну или восхититься гениальностью...
Вот тут полностью согласен. Права админа надо полюбому для такой реализации. ТС похоже и понятия не имеет что это такое. Что у пользователя прав админа быть не должно ему это не ведомо :)
я шизею... вы ТС знаете? или мне надо было наворотить с десяток килобайт кода, для решения такой задачи - тогда было бы круто? пфф... ребята, учиться вам и учиться еще... а вы тут понты колотите - кому что ведомо и неведомо... пруфлинки на портфолио господа, а потом уже посмотрим кто на что годен и кто о чем понятия имеет. пока вы в моих глазах - студенты, начитавшиеся умных книжек и понятия не имеющие о разработке реальных систем и их внедрении
вот вам реализация:
function CtrlDown : Boolean;
var
State : TKeyboardState;
begin
GetKeyboardState(State);
Result := ((State[vk_Control] and 128) <> 0);
end;

на OnCreate вешаем:
if CtrlDown then adminmode:=true;

ну и в коде _ if adminmode then...

только у меня вопрос: мне клавишу контрол держать нажатой когда? когда я по ярлыку щелкаю или когда уже щелкнул? ну чтобы мегаАПИ успело отловить?? а при моем подходе - у меня такой головной боли нет. Есть файл - ок, нет - тоже ок. умники блин... лишь бы выпендрится...
Гуглить мы все умеем www.codenet.ru пруфлинк указали бы, а то копипаст рулит я смотрю
видимо кода и портфолио я так и не дождусь.. печально, так хотелось восхитится...
бгг.. я не гуглил =))) у меня, пардон, либа есть, в которой собраны все нужные и полезные функции... и я просто их вызываю, когда мне надо. ну или копипастю в блог да. Кстати, если вы такой мега-прогер, предложите свою реализацию этой функции - я посмотрю насколько она будет лучше. и вообще - могу я вас вызвать на дуэль? выйдем в общие блоги, пусть нам подкинут задачку кто угодно - а мы потом выложим решения. только вот счет будет идти на часы. ок??? померяемся, кто чего стоит?
и ответ на мой вопрос - как обходить "засаду" со временем нажатия системной клавиши для гарантированного хука приложением - будьте добры...
ну-сс? что насчет лучшего решения чем по вашей ссылке и моему копипасту? как бы уже минут 10 прошло.... и что насчет померяться силами в решении практических задач?
А клавишу Win слабо отловить что бы залипания не произошло? Это вам ответ на засаду
а причем тут [win]? "Запуск приложения с нажатым шифтом, контролом или любой другой кнопкой - вход в отладку." - ваше? Либо вы не понимаете проблемы, либо никогда такого не делали. Повторю вопрос еще раз - в какой момент надо нажать "контрол", чтобы приложение при запуске "отловило" его?
Что мешает удерживать клавишу перед запуском?
гениально! а то что если нажму контрол и у меня выделится 2 ярлыка (например по невнимательности) - это как обходить прикажете?
в общем решение поставленной вами проблемы:
time_start:=Now;
repeat
if CtrlDown then adminmode:=true;
until SecondsBetween(time_start, Now)<=2;

программа после запуска будет ожидать 2 секунды на нажатие контрола чтобы перейти в дебаг режим.. программирование - это умение решать задачи, а не знание кучи языков программирования, половина из которых мертвые.
На ка вот погугли если такой умный, и скажи что это я такое писал 10 лет назад
mov ax,0b0bh
mov dx,10
xor cx,cx
z1: xor bx,bx
z2: cmp ax,dx
jb z3
inc bx
sub ax,dx
jmp z2
z3: add ax,'0'
cmp ax,':'
jb z5
add ax,'A'-':'
z5: push ax
inc cx
xchg ax,bx
or ax,ax
jne z1
z4: pop dx
mov ah,02h
int 21h
loop z4
retn
Время пошло :)
remnew
0
0
не знаю, что вы там писали, но то что у вас там куча goto с метками - это круто, однозначно. снимаю шляпу и удаляюсь. у нас препод был в институте, он кичился тем, что программировал на асме и фортране, на PL\ALGOL, пробивал перфокарты и мнил себя жутко крутым. но он вообще не умел решать задачи. т.е. операторы то он знал, а вот применить их - не умел. мне кажется в вашем случае то же самое. вы вероятно знаете много языков, но вот применить хотя бы один из них = не в силах. а ассемблер - да, это круто. сидеть и ипаться в мнемокодах, вместо того, чтобы изучить ЯВУ. (не Java!)
remnew
0
0
и да, я понял - вы кодер-гуру. Вы будете писать велосипед на асме, на API, гуглить, материться если уже кто-то кроме вас это написал и переписывать свой код, дабы быть уникальным и не замараться копипастой. а я быдло-кодер - мне не чужд коллективный разум, и вместо траты получаса на написание своей функции, я просто использую, ту, которую написали за 10 лет до меня, и скажу спасибо тому человеку. Что могу сказать еще - "Пишите, Шура, пишите...".
Чел че докопался то? Чит коды в приложения добавь и вся проблема. Набрать комбинацию клавиш в активном приложении и включил решим дебага, набрал ещё раз и отключил. Это всяко лучше чем создавать файлы (которые будут создаваться под правами админа) и перезапускать приложение.
remnew
0
0
ну хоть еще один конкретный и полезный коммент...
Там выше нет кнопки ответить к сожалению. Делать паузу при запуске программы это писец какой выход.
Мёртвые языки это опыт, который не пропить.
А теперь хотелось бы послушать что там на счёт прав админа у нас?
И по теме, надо бы признавать свои ошибки, а не перечить людям. Вам тут куча народу сказала что вы не правильно подходите к реализации. Зачем спорить?
remnew
0
0
Тем не менее - это более гибкий выход, чем предлагаемые вами хуки. Насчет языков - написал выше. Не важно сколько вы знаете языков программирования - один или десять. О программисте судят по его программам, а не по знанию языков. А насчет прав админа - еще раз повторю для тех кто в танке: я знаю в каком окружении будет запускаться программа и поэтому смело использую те решения, которые просты и эффективны. Для вашего сведения - даже под гостевой записью, программа может писать в свой каталог. Признать ошибки? Да я не против, только где они, мои ошибки? Куча народу высказала свое видение решение вопроса - кто через параметр запуска, кто еще через что-то, но только вы подняли бучу и начали бить себя пяткой в грудь - какой вы умный, и надо все писать через API "на века", а все тут бараны и ничего не знают.. ходите и гордитесь дальше. Мнение народа я уважаю, но у меня есть свое ИМХО. И если я поделился своим решением - не надо во-первых думать, что все тут гуру (новичкам проще использовать мой метод, чем API), а во-вторых, не настолько оно и безобразное. В любом коде есть изъяны и дополнительные условия его работы. А по вашему получается что лучше вообще не писать ничего. Ибо есть гуру, пишущие на асме и они все равно все обсерут. Таких как вы - 90% любого форума, как новичок не задаст вопрос - так ему сразу "Нуб! Чайник! В гугл! RTFM!", и пальцы веером... при этом почему-то забывается период собственного чайничества... А написать лишний раз строчку кода или копипастнуть с гугла или еще что-то - это ж западло.. не понимаю я таких как вы, честно не понимаю.
Я отписал в личку то что думаю. На этом моменте можете поливать меня как хотите и чем хотите. Мне не интересен разговор с упрямым дельфистом не признающим свои ошибки. Прощайте и кодите дальше в своём же стиле ))
remnew
0
0
Полностью взаимно =)))
Arrim
0
0
По теме: Дельфи не уважаю.
Автору: реально упрям. Если действительно можно включить отладку. То зачем изобретать велосипед?
remnew
0
0
По теме: и зря.
Комментатору: упрямство основано на опыте. А вам следует быть внимательнее читая посты и комменты: там дважды написано - этот хак для псевдо-отладки на компе заказчика, при отсутствии IDE и прочих прибамбасов. Т.е вы сами включаете в программу нужные вам отладочные процедуры, а вызываете их (дабы не провоцировать заказчика нажимать не нужные ему кнопки) указанным способом или одним из вариантов, указанных в комментах. Когда вы будете (если будете) внедрять разработанное обеспечение на рабочих местах ваших клиентов в организации скажем из 50-ти человек, вы поймете полезность этого хака. Или вы будете на всех 50-ти компах ставить IDE и дебаггер?
Arrim
0
0
Я внимательно читал коментарии. и Судя по ним Дебагер уже есть в комплекте с виндовс(не утверждаю). Да и вы всегда отладку проводите на компьютере заказчика? Я бы на месте заказчика принимал ТОЛЬКО ГОТОВЫЙ продукт.
>Да и вы всегда отладку проводите на компьютере заказчика? Я бы на месте заказчика >принимал ТОЛЬКО ГОТОВЫЙ продукт.
О чем я и говорю - вы судите о том порохе, которого не нюхали. Попробую описать ситуацию еще раз. Вы написали и сдали заказчику ГОТОВЫЙ ПРОДУКТ. Установили его у него на компьютере или тем более на нескольких компьютерах. Проходит день-два, заказчик звонит и говорит - "Ошибка у нас.". Естественно, никто и не подумал записать текст ошибки, или снять скриншот. Ваши действия? Вы будете перерывать всю программу в поисках этой ошибки или просто поедете к заказчику, переведете программу в отладочный режим и попросите его повторить те же действия, при которых была ошибка, а при возникновении оной - нажмете свою кнопку логирования к примеру и увидите где косяк. У? Или я опять неясно выражаюсь?
=========
"Да и вы всегда отладку проводите на компьютере заказчика? Я бы на месте заказчика принимал ТОЛЬКО ГОТОВЫЙ продукт." - прежде чем писать такое в следующий раз, задумайтесь, сколько реальных (не учебных) программ вы написали, сколько из них внедрили и сколько раз вам приходилось работать с заказчиками, в том числе с организациями из десятков рабочих мест.
ну продуктов без багов не бывает. возможность запуска проги в дебаг моде только +
Да мысль интересная, в практике нашей компании она применялась, пусть там был не admin.txt, но похожие способы...
Так же за определенное время работы, появляется понимание того, что крайне необходима система логирования ошибок. А когда проект на стадии тестирование то возможно и не только ошибок. Поэтому да, такие вот псевдо отладочные режимы, логи, и спец. утилиты идут как за здрасте =)

А ещё очень полезная весчь - Виртуальная машина! Предотвращает кучу моментов позора перед клиентом когда рабочая якобы программа вдруг требует какую то библиотеку и падает в АксессВиалешин или чего-то такое)))
faiwer
0
0
Ну вот взять ваш же код. Почему бы его сразу не описать так:
...
var
debug_mode: boolean = false;
...

procedure FormCreate(...)
begin
if FileExists(...) then begin
debug_mode:=true;
// читаем из него параметры (если надо)
end;
end;

либо

procedure FormCreate(...)
begin
debug_mode:=FileExists(...);
end;

а затем в коде

if debug_mode then begin
...
end;

А по сабжу, уж лучше отловить параметр передаваемый приложению, а саму прогу поставлять с батником. Оправдает себя Over 9000 раз.
1. не будет бесконечных обращений к диску (хватило бы и 1-го, хотя я думаю вы просто пример кривой привели)
2. не требуется прав на создание файла
3. более логично
faiwer
0
0
+ Можно написать предка от формы, с небольшим апи, куда сливать все изменения, типа етого:
procedure MyClass.Send(mes: string);
begin
DebugMemo.Lines.Add(TimeToStr(now)+': '+mes);
end;

...
DebugWindow.Send('myVar = ',myVar);
...

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

«Алматы – город, летящий под откос», или Кто заказал утку у российского блогера

«Алматы – город, летящий под откос», или Кто заказал утку у российского блогера

Некий блогер Сергей Никитский неустанно пишет о Казахстане, Астане, Экспо и посвящает два материала Алматы, причём подчёркнуто называет город Алма-Ата.
Langdon
19 июля 2017 / 15:44
  • 3543
  • 57
«Язык мой – враг мой», или 7 причин никогда не разговаривать с полицией

«Язык мой – враг мой», или 7 причин никогда не разговаривать с полицией

На этот раз пост очень важный и необходим к прочтению каждым! Не поленитесь и уделите время прочтению. Ни в коем случае, не разговаривайте с полицейскими до прихода вашего адвоката!
asselsabekova
18 июля 2017 / 14:19
  • 3296
  • 32
Один из способов выиграть суд против коллекторов

Один из способов выиграть суд против коллекторов

Сегодня в своем посте я постараюсь рассказать, как выиграть суд против некоторых коллекторских компании в нашей стране. Чем отличается коллекторское агенство от обычного банка?
Advokot
18 июля 2017 / 15:31
  • 3023
  • 10
Книга, которая сэкономит вам 150 тысяч долларов и два года жизни

Книга, которая сэкономит вам 150 тысяч долларов и два года жизни

Автор утверждает, что программы МБА не дают никакого позитивного выхлопа, если ты уже не являешься владельцем или наследником прибыльного бизнеса. Знания МБА можно получить бесплатно, уверяет он.
Aks_Ras
19 июля 2017 / 16:28
  • 2666
  • 2
Госорганы, ответственные за жизни детей, хранят молчание. У них в отчетах все хорошо

Госорганы, ответственные за жизни детей, хранят молчание. У них в отчетах все хорошо

Вчера все информационные агентства страны передали сообщение, которое заставило забиться в ужасе сердца всех матерей страны. В мусорном контейнере города Сатпаев было обнаружено тело новорожденной девочки.
AliyaSadyrbaeva
19 июля 2017 / 11:06
  • 2303
  • 18
Почему путь к любимому Иссык-Кулю из года в год не становится легче

Почему путь к любимому Иссык-Кулю из года в год не становится легче

Минувшие выходные для казахстанских туристов, рвущихся от алматинской жары к иссык-кульской прохладе, снова обернулись настоящим кошмаром.
caravan_kz
19 июля 2017 / 18:39
  • 1761
  • 4
Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

За день до своей гибели прямо около памятника жертвам политических репрессий 1937-го Жампозов сказал жене, что он – жертва точно таких же репрессий.
openqazaqstan
сегодня / 10:18
  • 1517
  • 7
Наша новая рубрика «Топ-5»: самые красивые актрисы Казахстана

Наша новая рубрика «Топ-5»: самые красивые актрисы Казахстана

Решили сделать топ-5 красивых актрис Казахстана. Очень долго спорили о первых трех местах и даже чуть не подрались. Было очень тяжело выбирать.
asdbqwe
20 июля 2017 / 14:24
  • 1719
  • 41
Легендарный вокалист «Linkin Park» унёс за собой молодость десятков тысяч людей

Легендарный вокалист «Linkin Park» унёс за собой молодость десятков тысяч людей

Самое грустное, что, как и всегда в таких случаях, скоро на Честера начнут изливаться потоки грязи - что он был наркоманом, или что-то подобное (как в случае со многими знаменитостями).
demonica
21 июля 2017 / 15:13
  • 1764
  • 49