место в рейтинге
  • 262690
  • 5490
  • 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
873

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

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

Войдите в ТОП-30 суперавторов Ювижн и зарабатывайте на этом!

Войдите в ТОП-30 суперавторов Ювижн и зарабатывайте на этом!

Дорогие ювиженцы. Соотечественники и соотечественницы. Авторы. Мы возобновляем нашу, не побоюсь этого слова, культовую акцию по вознаграждению топовых авторов. По итогам каждого календарного...
niyazov
24 марта 2017 / 17:54
  • 81822
  • 75
Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Многие клиенты, вздыхая о харамном ссудном проценте местных банков, сокрушались по поводу отсутствия у нас халяльного кредитования. Поддержка исламского банкинга на уровне МФЦА есть...
DanaJarlygapova
24 марта 2017 / 18:28
  • 6331
  • 43
Престарелый старец-киборг Рокфеллер предлагал уничтожить 90% населения Земли

Престарелый старец-киборг Рокфеллер предлагал уничтожить 90% населения Земли

Первую пересадку сердца Рокфеллер пережил в 1976 году на 62-м году жизни. Последнюю пересадку ему сделали в августе 2016 года. Пересадка сердца такому старому пациенту не имеет аналогов...
Timur_Tregulov
21 марта 2017 / 23:10
  • 6390
  • 52
Компания LG Electronics открыла предзаказ на новый флагман LG G6

Компания LG Electronics открыла предзаказ на новый флагман LG G6

LG Electronics объявляет о начале предварительного заказа онлайн на новый смартфон LG G6. Оформить предзаказ можно на сайтах магазинов электроники до 16 апреля 2017 года.
LG Electronics
24 марта 2017 / 14:20
  • 4480
  • 0
Беременность по-американски. Никто не ждет до 40 дней, с малышом гуляют с первого дня

Беременность по-американски. Никто не ждет до 40 дней, с малышом гуляют с первого дня

Мои волшебные 9 месяцев протекали в новой среде и далеко от всех родственников и подружек. Никто из моих знакомых в США на тот момент не успел обзавестись малышом, поэтому мне не с кем было...
Zarema_
23 марта 2017 / 9:25
  • 4007
  • 14
Алматы – это город-урод. Если вы живете здесь, то сами найдете кучу примеров

Алматы – это город-урод. Если вы живете здесь, то сами найдете кучу примеров

Париж, Рим, Барселона, Лондон, Алматы, Венеция – выберите город, который на ваш взгляд кажется лишним в этом списке. Если бы не было слова "урод", было бы легче определиться?
corridere
21 марта 2017 / 14:59
  • 4188
  • 75
Страну, где так строят дороги, победить невозможно!

Страну, где так строят дороги, победить невозможно!

Шестиминутный ролик про строительство автомобильной дороги в США - это как острый нож в пузо нашим чиновникам. Они же подавятся бешбармаком, увидев его! Похлеще любого пропагандистского фильма...
Timur_Tregulov
24 марта 2017 / 11:26
  • 3189
  • 31
Будьте бдительны при покупке цифровой техники! «Наебизнес» в магазинах техники

Будьте бдительны при покупке цифровой техники! «Наебизнес» в магазинах техники

Покупая бытовую технику в магазинах будьте внимательны. Сейчас практикуется впаривание дополнительных услуг по настройке. Прежде чем оформлять, проверьте суммы и уточните у манагеров если что-то не сходится.
dr_Motor
20 марта 2017 / 2:13
Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Многие уверенны на 100%, что сказка «Красавица и Чудовище» - это интересная выдумка ее создателей. Однако, действия, происходящие в мультфильме и фильме, имели место в истории, и у главных героев есть...
Naomi_K
вчера / 9:42
  • 3223
  • 30