Re: Soft broken. - ??
От: Frostbitten Россия  
Дата: 23.02.03 12:14
Оценка:
Здравствуйте, Sylph, Вы писали:

S>Вопрос: при отладке dll выдается такая бяка:


S>DBG: No threads available for break. Soft broken.


S>хотя при просто запуске это же место кода отрабатывает на ура. Так это чей софт брокен? dll-ки или приложения ее загружающего? Если первое, то это просто отлично (типа, можно что-то сделать), а если второе, то ... — я писал только библиотеку...


WinXP + VS6? Так? По непонятным причинам старые дебугеры (VS6, Delphi 5) не способны подрубаться к процессам, неотлаживаемым ими изначально.

Soft broken — конечно, не означает, что разрушен чей-то софт, как ты наверное предположил (это бы звучало как soft is/was broken), это лишь означает, что дебугер не смог выполнить break в текущей точке выполнения треда (он их просто не нашел), и выполнил остановку (break) процесса в специальной точке kernel'а (0x77xxxxxx) (на экране отображается Disassembler и текущая операция — это ret, выполнение кот. приведет к продолжению выполнения программы).

Для того, чтобы все было как надо, либо используй новые дебагеры — VS7, напр., либо в своей либе установи в месте, где хочешь брекнуть:
::DebugBreak();

или

__asm int 3;


Либо, если dll'ка у тебя не local COM сервер, делай по-нормальному: в Setting'ах проекта укажи Executable for debug session на exe'шник.

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

1. Почему такое происходит (начиная с WinNT 5.1) и где написано, что так должно быть?
2. Каким свойством должен обладать дебагер, чтобы нормально брекать неотлаживаемые им процессы?
3. Можно ли заставить дебагер VS6 работать так, как он работал в WinNT 5 и ниже?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.