Здравствуйте, 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 и ниже?