Вопрос: при отладке dll выдается такая бяка:
DBG: No threads available for break. Soft broken.
хотя при просто запуске это же место кода отрабатывает на ура. Так это чей софт брокен? dll-ки или приложения ее загружающего? Если первое, то это просто отлично (типа, можно что-то сделать), а если второе, то ... — я писал только библиотеку...
23.02.03 21:20: Перенесено модератором из 'C/C++' в Средства разработки — ХД
Здравствуйте, 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 и ниже?
F>WinXP + VS6? Так? По непонятным причинам старые дебугеры (VS6, Delphi 5) не способны подрубаться к процессам, неотлаживаемым ими изначально.
Да, именно так.
F>Для того, чтобы все было как надо, либо используй новые дебагеры — VS7, напр., либо в своей либе установи в месте, где хочешь брекнуть:
F>F>::DebugBreak();
F>или
F>__asm int 3;
F>
F>Либо, если dll'ка у тебя не local COM сервер, делай по-нормальному: в Setting'ах проекта укажи Executable for debug session на exe'шник.
Дык, так и сделал. Честно говоря, как отладить dll по-другому я не знал. Только вот — периодически получаю такую фигню... Спасибо за совет — буду пробовать 7-ю студию.
Здравствуйте, Sylph, Вы писали:
Я из-под семерки. Точно такое же сообщение получил при дебаге ехе. Сменил статику мфс на шаровую, поехало как по маслу!