Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BDS_2006 не закрывается программа

386
03 февраля 2007 года
newcss
297 / / 05.04.2005
Вообщем Проблемка такого плана.
Написал программу, провел серию тестов, вроде все чики пуки.
Залез в настройки убрал галочку
Built with runtime packages
---------
Программа скомпилилась, но перестала запускаться
при запуске просит ComCtrls.pas указать где есть эта шняга.

Вернул галочку на место... Теперь при закрытии приложения выводится окошко с названием CPU

ntdll.DbgBreakPoint:
7C901230 CC int 3
7C901231 C3 ret

и стрелочка указывает на нижнее сообщение....
Вообщем приложение можно так сказать перестало работать...
Чего ему ненравится? =)
602
04 февраля 2007 года
KPI Student
265 / / 16.12.2006
Исходники в студию! =)
386
04 февраля 2007 года
newcss
297 / / 05.04.2005
Вообщем облазив яндекс, гугль, рамблер, по запросу
ntdll.DbgBreakPoint
оказалось что эта хрень отладочная и вылазит время от времени... Это лажа разработчиков среды разработки. Как бороться, видел только патчи на паскале =( вообщем апздеЦ.
Сейчас попробую создать новый проект
386
04 февраля 2007 года
newcss
297 / / 05.04.2005
06-08-2003 19:02
Вот один из вариантов решения этой проблемы
(C) Francois PIETTE взято с [COLOR=#0000ff]http://www.howtodothings.com/showarticle.asp?article=502[/COLOR]

Add this procedure to your unit, and also the initialisation
section below. At runtime, the offending INT3 will be replaced
by a NOP instruction.



procedure PatchINT3;
var
NOP : Byte;
BytesWritten : DWORD;
NtDll : THandle;
P : Pointer;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
NtDll := GetModuleHandle('NTDLL.DLL');
if NtDll = 0 then Exit;
P := GetProcAddress(NtDll, 'DbgBreakPoint');
if P = nil then Exit;

try
if Char(P^) <> #$CC then Exit;
NOP := $90;
if WriteProcessMemory(GetCurrentProcess, P, @NOP, 1,
BytesWritten) and (BytesWritten = 1) then
FlushInstructionCache(GetCurrentProcess, P, 1);
except
//Do not panic if you see an EAccessViolation here,
// it is perfectly harmless!
on EAccessViolation do ;
else raise;
end;
end;

initialization
PatchINT3;
386
04 февраля 2007 года
newcss
297 / / 05.04.2005
УРА!!!!! ВСе проблема решена!
Решение:
Десят раз перечитать карл маркса =).

Вообщем лажа в том, что были нарушены границы массива, засчет чего рушился стек.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог