Конференция "Прочее" » Подавления окна отладчика "Debugger Exception Notification"
 
  • Добежал (19.01.09 19:34) [0]
    Когда приложение запускается из под среды при возникновении исключения всплывает окно отладчика с информацией об исключении:

    http://s2.ipicture.ru/uploads/090119/1X925CUaU7.jpg
    (зеркало): http://s47.radikal.ru/i117/0901/b1/0db2c8b51aa2.jpg

    И получается забавно в случае с приложением, которое развернуто на весь экран поверх всех окон.

    С одной стороны во время наступления исключения отладчик тормозит выполняющиеся потоки до момента закрытия этого диалогового окна и приказа продолжить выполнение. С другой стороны, этого всплывающего диалога из под приложения "поверх всех окон" просто не видно. В результате все висит и нихрена не сделаешь (

    Как можно отключить выдачу данного окошка при выполнении определенных строк кода?

    Я сразу отмечу, что не хочу в принципе отключать данное всплывающее окно отладчика. Также я не хочу убирать реагирование на данный тип исключения. Просто чтобы на определенных строках кода данное окошко не всплывало, но исключение отрабатывалось операторами try..except в рантайме.
  • Leonid Troyanovsky © (19.01.09 19:41) [1]

    > Добежал   (19.01.09 19:34)  

    > Я сразу отмечу, что не хочу в принципе отключать данное
    > всплывающее окно отладчика. Также я не хочу убирать реагирование
    > на данный тип исключения.

    Убери на весь экран поверх всех.
    Все равно, оно лишнее.

    --
    Regards, LVT.
  • Добежал (20.01.09 11:54) [2]
    Нравится мне этот форум. Люди понятия не имеют о задачах, но все равно думаю что они умнее всех и лучше автора знают что ему надо.

    --
    Regards, Pit.
  • Добежал (20.01.09 14:18) [3]
    Блин, судя по молчанию здесь, по отзывам знающих людей проблема просто не имеет решения впрямую.
  • AndreyV © (20.01.09 14:26) [4]
    > [3] Добежал   (20.01.09 14:18)
    > Блин, судя по молчанию здесь, по отзывам знающих людей проблема
    > просто не имеет решения впрямую.

    Желание странное. Запускай не из среды.
  • Jack128_ (20.01.09 14:34) [5]

    > Желание странное. Запускай не из среды.

    иногда бывает желание забить на исключения в функции А, но обращать внимание на исключения в функции Б.
  • Leonid Troyanovsky © (20.01.09 15:13) [6]

    > Добежал   (20.01.09 11:54) [2]

    > но все равно думаю что они умнее всех и лучше автора знают
    > что ему надо.

    Я тоже так думаю.
    Это ж надо - "развернуто на весь экран поверх всех".
    Эмуляция десктопа, млин.

    --
    Regards, LVT.
  • Юрий Зотов © (20.01.09 15:35) [7]
    На время отладки - почему бы действительно не отключить "поверх всех"?
    После отладки - включить обратно.
  • Добежал (20.01.09 15:39) [8]

    > Это ж надо - "развернуто на весь экран поверх всех".
    > Эмуляция десктопа, млин

    а как по-твоему платежные терминалы работают?


    > На время отладки - почему бы действительно не отключить
    > "поверх всех"?

    ну так и делаю. Вопрос только как определять, что запущено из под среды. Выбрал способ с isDebuggerPresent.
  • test (20.01.09 15:48) [9]
    Добежал   (20.01.09 15:39) [8]
    Ты когда сдавать будеш тогда включи, зачем тебе во время отладки/написания лишние трудности?
  • Leonid Troyanovsky © (20.01.09 15:49) [10]

    > Добежал   (20.01.09 15:39) [8]

    > > Эмуляция десктопа, млин

    > а как по-твоему платежные терминалы работают?

    Если они работают так, то их надо выкинуть на помойку.

    --
    Regards, LVT.
  • Добежал (20.01.09 15:54) [11]

    > Ты когда сдавать будеш тогда включи, зачем тебе во время
    > отладки/написания лишние трудности?

    мне то все равно. Но если другой человек вдруг из под среды запустить приложение и там в настройках будет стоять не дебаг режим - то он натолкнется на глюк такой. Я лично очень не сразу понял что за нафиг.


    > Если они работают так, то их надо выкинуть на помойку.

    а как надо работать?
  • Leonid Troyanovsky © (20.01.09 15:58) [12]

    > Добежал   (20.01.09 15:54) [11]

    > а как надо работать?

    Например, на отдельном десктопе.

    --
    Regards, LVT.
  • Кто б сомневался © (20.01.09 16:01) [13]

    > Как можно отключить выдачу данного окошка при выполнении
    > определенных строк кода?


    Те. нужно отключить выдачу определенного исеключения во время работы в среде.
    ну так делай собственный тип исключения, и добавляй его в Debugger Options >> language Exception.
  • Добежал (20.01.09 16:35) [14]

    > Например, на отдельном десктопе.

    а можно поподробнее: какие при этом будут преимущества, как создавать десктоп, как выводить его на активный экран?

    Например, если к компьютеру подключено два монитора, то при обычном запуске можно управлять, перетащить на каком мониторе будет отображаться, если делать на отдельном десктопе возможно ли это будет делать, насколько просто?


    > ну так делай собственный тип исключения, и добавляй его
    > в Debugger Options >> language Exception.

    были мысли... Но в общем проблема решена с помощью isDebuggerPresent
  • ketmar © (20.01.09 17:02) [15]
    >[14] Добежал (2009-01-20 16:35:00)
    а чего, на msdn перманентный бан?

    ---
    Do what thou wilt shall be the whole of the Law.
  • Добежал (20.01.09 17:27) [16]
    перманентная нехватка времени. Не могу себе позволить изучать там что-то (тем более долго, а пока не знаю - не имею представления долго ли), чтобы потом понять, что мне это не подходит.
  • ketmar © (20.01.09 17:45) [17]
    >[16] Добежал (2009-01-20 17:27:00)
    >перманентная нехватка времени. Не могу себе позволить изучать там что-то

    нивапрос. проконсультирую. за деньги, натурально. потому что мы, знаешь ли, тоже не дети Ротшильдов, и время своё драгоценное таки тратили на изучение. а ты хочешь, чтобы тебе теперь бесплатно всё разжевали и ещё запить поднесли. нет пути.

    ---
    Do what thou wilt shall be the whole of the Law.
  • Leonid Troyanovsky © (20.01.09 17:50) [18]

    > Добежал   (20.01.09 16:35) [14]


    program Project1;

    uses
     Forms,
     Windows,
     Unit1 in 'Unit1.pas' {Form1};

    {$R *.RES}

    var
     NewDesktop, thisdesktop : HDESK;

    begin
     thisdesktop := GetThreadDesktop(GetCurrentThreadId);
     Application.Free;
     NewDesktop := CreateDesktop( 'MyDeskTop', nil, nil, 0,
                                   GENERIC_ALL, nil );
     SetThreadDesktop( NewDesktop );
     Application := TApplication.Create(nil);
     SwitchDesktop( NewDesktop );

     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;

     SetThreadDesktop( thisDesktop );
     SwitchDesktop( thisDesktop );
     CloseDesktop( NewDesktop );
    end.



    > Добежал   (20.01.09 17:27) [16]

    > перманентная нехватка времени

    У нас этого времени - вагон.
    Везде успевает тот, кто никуда не торопится.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.01.09 18:02) [19]

    > ketmar ©   (20.01.09 17:45) [17]

    >  нет пути.

    А, это был воспитательный прием.
    Sorry.

    --
    Regards, LVT.
  • Добежал (20.01.09 18:05) [20]
    Leonid Troyanovsky, отличный пример, спасибо!

    Но непонятно:

    1) какие все таки преимущества, что я буду работать на отдельном десктопе?

    2) что будет если мой процесс аварийно завершится и не дойдет дело до:
    SetThreadDesktop( thisDesktop );
    SwitchDesktop( thisDesktop );

    ?
  • Leonid Troyanovsky © (20.01.09 18:16) [21]

    > Добежал   (20.01.09 18:05) [20]


    > 1) какие все таки преимущества, что я буду работать на отдельном
    > десктопе?

    Сравнивай сам vs "развернуто на весь экран поверх всех".

    > 2) что будет если мой процесс аварийно завершится и не дойдет
    > дело до:
    > SetThreadDesktop( thisDesktop );
    > SwitchDesktop( thisDesktop ); ?

    Это твое дело ;)
    И что значит "аварийно"? У нас такого не бывает.
    Закончил - и хорошо [33 кв.м]

    --
    Regards, LVT.
  • Добежал (20.01.09 18:40) [22]

    > Сравнивай сам vs "развернуто на весь экран поверх всех".

    я, если честно, преимуществ не вижу. Просто, если вы сказали что так правильнее,вы знаете ПОЧЕМУ правильнее?

    Если касаться именно рассматриваемой проблемы, то ведь программа точно также бы стартовала только на отдельном десктопе, переключила бы активный (или как это называется) десктоп на свой, дельфи на своем десктопе вывел бы ошибку и точно также бы все зависло...
  • Leonid Troyanovsky © (20.01.09 19:14) [23]

    > Добежал   (20.01.09 18:40) [22]

    > я, если честно, преимуществ не вижу. Просто, если вы сказали
    > что так правильнее,вы знаете ПОЧЕМУ правильнее?

    Потому, что за этим идут вопросы: как отключить Alt-Tab,
    Ctrl-Esc & etc.

    > дельфи на своем десктопе вывел бы ошибку и точно также бы
    > все зависло...

    Ну, что ж - бывает.
    Я про отладку, во-ще, молчал.

    --
    Regards, LVT.
  • Добежал (20.01.09 19:42) [24]

    > Потому, что за этим идут вопросы: как отключить Alt-Tab,
    >
    > Ctrl-Esc & etc.

    ну эта проблема не стоит в силу того, что у киосков клавиатуры нету, из элементов управления тач-экран и все.


    > Ну, что ж - бывает.
    > Я про отладку, во-ще, молчал.

    но зато тема то про отладку. Вы сказали, что нефиг делать поверх всех, как альтернативу вы предложили создать десктоп, который в свою очередь создает точно такие же проблемы, как и режим поверх всех. То есть, критика выбранного варианта работы и предложение альтернативы никоим образом проблему не решает (

    А в винде нету каких-либо сочетаний, которые могут менять "активный" десктоп?
    Если нету - то получается, пока программа сменившая десктоп не соизволит вернуть активность старому десктопу - пользователь никак не может юзерскими действиями сменить все обратно?

    Или по-другому, если вдруг программу которая поменяла десктоп аварийно завершить (TerminateProcess), то на экране будет пустой рабочий стол и юзер не сможет вернутсья к "родному" десктопу, верно это?
  • vuk © (20.01.09 19:46) [25]
    >Потому, что за этим идут вопросы: как
    >отключить Alt-Tab, Ctrl-Esc & etc.
    В терминалах, как правило такой проблемы нет. По причине отсУтствия клавиатуры.
  • Leonid Troyanovsky © (20.01.09 19:52) [26]

    > Добежал   (20.01.09 19:42) [24]

    >  который в свою очередь создает точно такие же проблемы,
    >  как и режим поверх всех. То есть, критика выбранного варианта
    > работы и предложение альтернативы никоим образом проблему
    > не решает (

    Проблемы пока не увидел.

    > Или по-другому, если вдруг программу которая поменяла десктоп
    > аварийно завершить (TerminateProcess), то на экране будет
    > пустой рабочий стол и юзер не сможет вернутсья к "родному"
    > десктопу, верно это?

    А кто ему будет делать TerminateProcess?
    Терминальная сессия? Вот тут надо разобраться,
    особенно для платежных терминалов.

    --
    Regards, LVT.
  • vuk © (20.01.09 19:52) [27]
    А вообще при разработке терминала обошлись тем, что сделали программу shell-ом. И никаких "поверх всех".
  • Leonid Troyanovsky © (20.01.09 19:58) [28]

    > vuk ©   (20.01.09 19:52) [27]

    > А вообще при разработке терминала обошлись тем, что сделали
    > программу shell-ом. И никаких "поверх всех".

    И это правильно.
    Не стоит приумножать сущности сверх нужды.

    --
    Regards, LVT.
  • ketmar © (20.01.09 20:08) [29]
    >[19] Leonid Troyanovsky © (2009-01-20 18:02:00)
    >А, это был воспитательный прием.

    ну да. я намекал, что хотя бы почитать-разобраться, хоть в основах — оно не вредно никогда.

    ---
    All Your Base Are Belong to Us
  • Leonid Troyanovsky © (20.01.09 20:15) [30]

    > Leonid Troyanovsky ©   (20.01.09 19:58) [28]

    > Не стоит приумножать сущности сверх нужды.

    О..
    Задумался: можно ли сформулировать оный принцип
    применительно к ему самому.

    Пока получлось:
    нет нужды плодить суть сверх нужды.

    Какая минимальная символьная последовательность
    в русском языке позволит передать искомый смысл?

    --
    Regards, LVT.
  • ketmar © (20.01.09 20:22) [31]
    >[30] Leonid Troyanovsky © (2009-01-20 20:15:00)
    >Какая минимальная символьная последовательность
    >в русском языке позволит передать искомый смысл?

    «не п…ди!»

    ---
    All Your Base Are Belong to Us
  • Leonid Troyanovsky © (20.01.09 20:24) [32]

    > Leonid Troyanovsky ©   (20.01.09 20:15) [30]

    > нет нужды плодить суть сверх нужды.

    Не плоди суть чрезмерно.

    Короче, но некотарая двусмысленность.

    Похоже, что победителем может быть нечто вроде "бди!".

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.01.09 20:27) [33]

    > ketmar ©   (20.01.09 20:22) [31]

    > >Какая минимальная символьная последовательность
    > >в русском языке позволит передать искомый смысл?

    > «не п…ди!»

    О.. Я почти угадал :)

    Однако, переобоснуй.

    --
    Regards, LVT.
  • ketmar © (20.01.09 20:39) [34]
    >[33] Leonid Troyanovsky © (2009-01-20 20:27:00)
    >Однако, переобоснуй.

    вкратце: чуть менее, чем все пложения сущностей (а то и все) ведут к лишнему многословию. сначала поясни, что ты ввёл. потом — зачем. потом пристегни. слова-слова-слова. потому сначала сто раз подумай, прежде чем рот открывать.

    ---
    Do what thou wilt shall be the whole of the Law.
  • Leonid Troyanovsky © (20.01.09 20:43) [35]

    > ketmar ©   (20.01.09 20:39) [34]

    >  потому сначала сто раз подумай, прежде чем рот открывать.

    Тогда получается: «не переп…ди!»

    --
    Regards, LVT.
  • ketmar © (20.01.09 20:47) [36]
    >[35] Leonid Troyanovsky © (2009-01-20 20:43:00)
    ну да, может и так. мой вариант более афористичен просто. проблема с этими вариантами в том, что они понятны только тому, кто и так не будет плодить. %-)

    ---
    All Your Base Are Belong to Us
  • Leonid Troyanovsky © (20.01.09 20:50) [37]

    > Leonid Troyanovsky ©   (20.01.09 20:43) [35]

    > Тогда получается: «не переп…ди!»

    Несколько раз повторил заклинание и
    понял, что "пере" - перебор.

    Т.е., пока наиболее лаконичный перевод Оккамы
    на русский  есть "не п..ди".

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.01.09 21:04) [38]

    > Leonid Troyanovsky ©   (20.01.09 20:50) [37]

    > Т.е., пока наиболее лаконичный перевод Оккамы
    > на русский  есть "не п..ди".

    После длительных размышлений я пришел к выводу, что эта
    форма должна звучать так: "и не п..ди".

    Хороше бы еще найти эквивалент в литературном языке,
    дабы пользовать его повсеместно.

    --
    Regards, LVT.
  • ketmar © (20.01.09 21:49) [39]
    >[38] Leonid Troyanovsky © (2009-01-20 21:04:00)
    >форма должна звучать так: «и не п..ди».

    во. подписываюсь, так действительно лучше.

    >Хороше бы еще найти эквивалент в литературном языке
    у… сомневаюсь, что получится так же выразительно и кратко. всё-таки я не зря взял матерное слово.

    ---
    Do what thou wilt shall be the whole of the Law.
  • Пробегал2.... (20.01.09 21:53) [40]
    Leonid Troyanovsky ©   (20.01.09 19:52) [26]
    Проблемы пока не увидел.


    проблема описана в самом первом посте.

    Если запуск программы происходит из под среды, то при возникновении исключении отладчик останавливает процесс и выводит окошко исключения.

    При варианте поверх всех окон это окно отладчика не видно, среду тоже не видно, все застопорилось и помогает только диспетчер задач.

    При вашем варианте с новым десктопом будет тоже самое, окно отладчика не будет видно, среду тоже. А вот поможет ли диспетчер задач уже фиг знает.

    Я хотел бы переформулировать вопрос - если по каким-либо причинам процесс который "сменил" десктоп аварийно завершен или приложения заглючило - есть ли юзерский метод вернутся на стандартный десктоп?
  • Leonid Troyanovsky © (20.01.09 21:59) [41]

    > Пробегал2....   (20.01.09 21:53) [40]

    > Я хотел бы переформулировать вопрос - если по каким-либо
    > причинам процесс который "сменил" десктоп аварийно завершен
    > или приложения заглючило - есть ли юзерский метод вернутся
    > на стандартный десктоп?

    Что значит "аварийно завершен"?
    Из терминальной сессии? Кем? Зачем?

    Вс остальное - в твоих руках.

    --
    Regards, LVT.
  • ketmar © (20.01.09 22:12) [42]
    >[40] Пробегал2…. (2009-01-20 21:53:00)
    >если по каким-либо причинам процесс который «сменил» десктоп аварийно завершен
    >или приложения заглючило — есть ли юзерский метод вернутся на стандартный
    >десктоп?

    а что, переключить назад — никак? фильтр на исключения фатальные, например, и в нём переключать.

    ---
    All Your Base Are Belong to Us
  • Пробегал2.... (20.01.09 22:25) [43]
    ketmar ©   (20.01.09 22:12) [42]

    я понимаю, но вопрос остается - если прога все таки не смогла переключить обратно - у юзера есть средства встроенные в винды по переключению на родной десктоп?

    Допустим, прога даже не завершилась, а заглючила (зависла), что еще хуже получается. В варианте "поверх всех окон" ее хоть диспетчером задач снять можно и вуаля. А в способе с десктопами что сделаешь, ну терминируешь процесс, как вернуться средствами винды юзерскими к дефолтному десктопу?
  • Пробегал2.... (20.01.09 22:26) [44]
    хм... я вот тут подумал... Терминирование процесса explorer и его повторный запуск видимо решит проблему?
  • ketmar © (20.01.09 22:54) [45]
    >[43] Пробегал2…. (2009-01-20 22:25:00)
    >как вернуться средствами винды юзерскими к дефолтному десктопу?

    у стандартной винды нет таких средств. можешь поглазеть на системный десктоп (по ctrl+alt+del). а вот куда оно выкинет потом — не помню.

    ---
    Do what thou wilt shall be the whole of the Law.
  • ketmar © (20.01.09 22:54) [46]
    >[44] Пробегал2…. (2009-01-20 22:26:00)
    >Терминирование процесса explorer и его повторный запуск видимо решит проблему?

    теоретически — не должно.

    ---
    Do what thou wilt shall be the whole of the Law.
  • Игорь Шевченко © (20.01.09 22:56) [47]

    > А в способе с десктопами что сделаешь, ну терминируешь процесс,
    >  как вернуться средствами винды юзерскими к дефолтному десктопу?
    >


    а ты попробуй
  • ketmar © (20.01.09 22:58) [48]
    >[47] Игорь Шевченко © (2009-01-20 22:56:00)
    >а ты попробуй

    Игорь, ты садист. помнится, при экспериментировании с этим API у меня экспериментатор завалился. было очень смешно.

    правда, на win2k, не знаю, что сейчас.

    ---
    All Your Base Are Belong to Us
  • Leonid Troyanovsky © (21.01.09 19:21) [49]

    > Пробегал2....   (20.01.09 22:25) [43]

    > Допустим, прога даже не завершилась, а заглючила (зависла),
    >  что еще хуже получается.

    О, как все запущено.. Как оказались вне привычного десктопа,
    то сразу плывем-с.

    Допустим, что ты не уверен в собс-ном терминальном платежаторе.
    Тогда пусти процесс, который умеет реагировать на волшебное
    сочетание клавиш для терминирования платежного терминатора,
    но, кроме того,  способнен его: а) запускать, б) дожидаться
    его завершения, в) и собс-но, терминировать незавершаемое.

    Это вовсе не сложно. Ну, и возможны варианты.
    Бо, исходных данных достаточно, IMHO.

    --
    Regards, LVT.
  • Virgo_Style © (21.01.09 19:42) [50]
    Leonid Troyanovsky ©   (20.01.09 21:04) [38]
    После длительных размышлений я пришел к выводу


    "Нефиг!"
  • ketmar © (21.01.09 22:20) [51]
    >[49] Leonid Troyanovsky © (2009-01-21 19:21:00)
    >Тогда пусти процесс, который умеет реагировать на волшебное
    >сочетание клавиш

    а разве они не свои для каждого десктопа?

    (это вопрос, я таки не помню)

    ---
    Do what thou wilt shall be the whole of the Law.
  • Leonid Troyanovsky © (22.01.09 18:00) [52]

    > ketmar ©   (21.01.09 22:20) [51]

    > а разве они не свои для каждого десктопа?

    Свои, конечно.
    Скажем, процесс, осуществляющий переключения должен
    иметь два (невидимых) окна - одно на исходном десктопе, второе -
    на переключаемом, причем, окна принадлежат разным потокам.
    Peter Below как-то приводил пример, как пустить форму на
    отдельный десктоп и указал на ограничения, которые накладывает использование VCL.
    Если делать окна собс-ручно, то не вижу особых проблем.

    Да, а волшебные сочетания регистрируются для каждого окна.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (22.01.09 18:02) [53]

    > Virgo_Style ©   (21.01.09 19:42) [50]

    > "Нефиг!"

    Оценил :)

    --
    Regards, LVT.
  • Добежал (22.01.09 19:54) [54]

    > > а разве они не свои для каждого десктопа?
    >
    > Свои, конечно.

    а я вот не соглашусь. По крайней мере делаем:

    1) наблюдаем "родной" десктоп
    2) создаем и переключаемся на какой-то другой второй дестоп
    3) в том десктопе запускаем процесс explorer'а , появляется второй процесс explorer.exe, появляются иконки, панели и т.д. на втором десктопе
    4) нажатие клавиши WIN+E на втором десктопе не приводит к открытию окна проводника. Оно приводит к открытию окна проводника на "родном" десктопе, на котором, видимо, первый explorer стартанул раньше и успел забить данное сочетание клавиш.

    Отсюда я делаю вывод, что или регистрация хоткеев уникальна в пределах сеанса (а не в пределах десктопа), или я что-то не понимаю.
  • Leonid Troyanovsky © (22.01.09 20:14) [55]

    > Добежал   (22.01.09 19:54) [54]

    > 4) нажатие клавиши WIN+E на втором десктопе не приводит
    > к открытию окна проводника.

    WIN+ - это не показатель, там много произвола.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (22.01.09 20:23) [56]

    > Leonid Troyanovsky ©   (22.01.09 20:14) [55]

    Хотя, в The RegisterHotKey function defines a system-wide hot key.
    смущает system-wide.
    Однако, это не препятствует замыслу.

    --
    Regards, LVT.
 
Конференция "Прочее" » Подавления окна отладчика "Debugger Exception Notification"
Есть новые Нет новых   [134453   +32][b:0][p:0.002]