Re: неостанавливаемый отладчиком поток
От: anonymous185  
Дата: 25.02.13 19:10
Оценка: 8 (2)

как сказать отладчику не оставливай этот конкретный поток никогда ?


ZwSetInformationThread(NtCurrentThread(), ThreadHideFromDebugger, 0, 0);
Re[3]: неостанавливаемый отладчиком поток
От: anonymous185  
Дата: 25.02.13 22:29
Оценка: 3 (2)
я ошибся(точнее написал не подумав) — после set ThreadHideFromDebugger — перестают приходить отладочные события от этого потока отладчику, но если отладочное событие(например breakpoint или singlestep исключение) происходит в другом потоке — то все остальные потоки суспендятся то тех пор пока отладчик не вызовет DbgUiContinue.
так что ZwSetInformationThread здесь не поможет.
неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 10:46
Оценка:
Всем привет

значит появился у меня в программе WH_MOUSE_LL хук ...

LRESULT CALLBACK LowLevelMouseProc(          int nCode,
                                   WPARAM wParam,
                                   LPARAM lParam
                                   )
{
    if (nCode < 0)
        return CallNextHookEx(0, nCode, wParam, lParam);

    // bla bla bla ...

    return CallNextHookEx(0, nCode, wParam, lParam);
}


и отлаживаться стало невозможно ...

когда отладчик брякается или просто делаю пошаговое выполнение то отладчик останавливает поток
которые прокачивает сообщения через этот хук (для этой цели я создал специальный фоновый поток
который состоит только из цикла с GetMessage) из за этого указатель мыши начинает очень сильно
тормозить при передвижении и работать невозможно ...

хоть не отлаживайся ...

как сказать отладчику не оставливай этот конкретный поток никогда ?

VS 2008

спасибо
Re: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 11:04
Оценка:
или как можно определить что к нам цепляют отладчик ? есть IsDebuggerPrsent но пока до нее дойдет уже испытываеш огромные тормоза с мышкой ...

видимо он сначала морозит весь проццесс (тут начинаются тормоза смышкой) грузит все что надо потом запускает процесс и только потом снимается хук на IsDebuggerPresent
Re: неостанавливаемый отладчиком поток
От: rus blood Россия  
Дата: 25.02.13 12:04
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>хоть не отлаживайся ...


Вынести хук в отдельную dll ?
Имею скафандр — готов путешествовать!
Re[2]: неостанавливаемый отладчиком поток
От: rus blood Россия  
Дата: 25.02.13 12:05
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>или как можно определить что к нам цепляют отладчик ? есть IsDebuggerPrsent но пока до нее дойдет уже испытываеш огромные тормоза с мышкой ...


А _DEBUG не подойдет никак?
Не цеплять хук в _DEBUG, а в релизе отлаживать через логирование...
Имею скафандр — готов путешествовать!
Re: неостанавливаемый отладчиком поток
От: Alexander G Украина  
Дата: 25.02.13 12:48
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>как сказать отладчику не оставливай этот конкретный поток никогда ?


Вынести поток с хуком в отдельный процесс.
Русский военный корабль идёт ко дну!
Re: неостанавливаемый отладчиком поток
От: ononim  
Дата: 25.02.13 13:10
Оценка:
Можно запускать приложение на другом десктопе (см например Desktops) ну или дебагер на другом десктопе а приложение — на дефолтовом.
Как много веселых ребят, и все делают велосипед...
Re[2]: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 18:59
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Вынести хук в отдельную dll ?


а что это даст ? поток то один и тот же ...
Re[3]: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 19:02
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>А _DEBUG не подойдет никак?

RB>Не цеплять хук в _DEBUG, а в релизе отлаживать через логирование...

не очень хорошо если в _DEBUG сборке эта функциональность будет недоступна а отлаживать через логирование это кошмар ...
Re[2]: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 19:04
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Вынести поток с хуком в отдельный процесс.


это конечно решение но отдельный процесс ...
Re[2]: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 19:06
Оценка:
Здравствуйте, ononim, Вы писали:

O>Можно запускать приложение на другом десктопе (см например Desktops) ну или дебагер на другом десктопе а приложение — на дефолтовом.


не в теме ... а можно в двух словах как это поможет ?
Re[2]: неостанавливаемый отладчиком поток
От: jyuyjiyuijyu  
Дата: 25.02.13 19:58
Оценка:
Здравствуйте, anonymous185, Вы писали:

A>ZwSetInformationThread(NtCurrentThread(), ThreadHideFromDebugger, 0, 0);


странно выполняю такой код NTSTATUS == 0 но поток виден в отладчике и мышка так же тормозит

DWORD WINAPI hookth(void*)
{
    NTSTATUS code = NtSetInformationThread(NtCurrentThread(), ThreadHideFromDebugger, 0, 0);
    llmhook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandle(0), 0);
    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
Re[3]: неостанавливаемый отладчиком поток
От: ononim  
Дата: 25.02.13 20:29
Оценка:
O>>Можно запускать приложение на другом десктопе (см например Desktops) ну или дебагер на другом десктопе а приложение — на дефолтовом.
J>не в теме ... а можно в двух словах как это поможет ?
Хуки работают в пределах десктопа. Если хуки будут стоять не на том десктопе что дебаггер — они на него влиять не будут и ниче не будет виснуть.
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.