Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Debugger Fault


Автор: Burka 30.11.2010, 09:34
Написал довольно большую программу, через некоторое время пришлось к ней вернутся и добавить некоторые функции. Но при запуске через делфи выдает ошибку. Причем программа нормально запускается вне делфи, никаких изменений в программу еще не внес. Подскажите что может помочь?

PS Думал из за касперского, но с отключенной защитой делфи выдавал тоже самое.


Автор: GBB700 30.11.2010, 10:07
Ну а каких местах выскакивают ошибки? Что за ошибки?
Если программа нормально работает вне делфи то возможно ошибки выскакивают внутри блоков try которые отладчик делфи все равно отображает, а нормальном режиме они обрабатываются иначе. 

Автор: Burka 30.11.2010, 10:22
Цитата(GBB700 @ 30.11.2010,  10:07)
Ну а каких местах выскакивают ошибки? Что за ошибки?
Если программа нормально работает вне делфи то возможно ошибки выскакивают внутри блоков try которые отладчик делфи все равно отображает, а нормальном режиме они обрабатываются иначе.

При запуске ошибка выскакивает, я не знаю в каком месте, даже при Step Over ошибка выскакивает сразу же. Окно ошибки в аттаче. При запуске программы не выполняется никаких кодов в try except. Единственное подключаются функции из длл, статически. Но при запуске выдавались бы ошибки. А так все работает.

Автор: Snowy 30.11.2010, 11:48
Ну и наплюй слюнями.
Жми Ок и снова F9.
Написано же - внутреннее программное исключение, жми Run.
Можешь добавить это исключение в игнор.
Это плановое исключение. Оно там и задумано.

Автор: Burka 30.11.2010, 12:03
Как его можно заигнорить?
Нажатие F9 не помогает, дебагер не закрывается и форма не появляется
пс. форма появляется, ждать приходится. 

Автор: Snowy 30.11.2010, 12:29
Цитата(Burka @  30.11.2010,  12:03 Найти цитируемый пост)
Как его можно заигнорить?
В настройках дельфи в разделе Debuger Options
В добавить свой код OS Exeptions (в твоём случае это $C000001d)

Добавлено через 1 минуту и 24 секунды
Хотя он там и так есть.
Попробуй поменять флажочки.

Автор: Burka 30.11.2010, 12:45
Спасибо большое, сам бы в жизни не разобрался. 
Убрал флажок integrated debugging и стало запускаться без ошибки.

Автор: CodeMonkey 1.12.2010, 06:22
Цитата(Burka @  30.11.2010,  11:22 Найти цитируемый пост)
я не знаю в каком месте


После нажатия на OK в окне, что в аттаче - что происходит? Уж не тыркает ли отладчик на строку с ошибкой, а?

Цитата(Snowy @  30.11.2010,  12:48 Найти цитируемый пост)
Это плановое исключение. Оно там и задумано.


"faulted" - это вылет приложения. Вылет приложения - это плановое исключение?

Цитата(Burka @  30.11.2010,  13:45 Найти цитируемый пост)
Убрал флажок integrated debugging и стало запускаться без ошибки. 


Класс. Проблема воспроизводится только под отладчиком. Некоторые считают это счастьем. Гораздо хуже, когда наоборот. И что же мы делаем? Вместо того, чтобы решать проблему, мы отключаем отладчик! Пять баллов. От того, что вы закрыли глаза на проблему, она никуда не уйдёт.

C000001D - это EXCEPTION_ILLEGAL_INSTRUCTION. Что-то в вашей программе ну очень страшное происходит. Вы же не хотите оставить эту ошибку?

http://www.gunsmoker.ru/2010/11/itdevcon.html (ссылка на материалы - в конце).

Если с этим проблемы, действуем так:
1. http://www.gunsmoker.ru/2009/04/delphi_19.html.
2. Анализируем состояние программы после нажатия на OK в том окне с фатальной ошибкой.

Как вариант - использовать Search/Go to address, $7C96478E

Автор: Snowy 1.12.2010, 12:55
А ты предлагаешь править винду?
Если ничего не менялось, значит проблема в системе.
Ставлю конфетку на то, что, если накатить последний сервиспак, проблема исчезнет в принципе.

Автор: CodeMonkey 1.12.2010, 13:43
http://www.transl-gunsmoker.ru/2010/08/997.html.

Автор: Burka 7.12.2010, 13:21
Короче эта ошибка появляется если я в программе использую функции из длл, возможно я подключаю что то не правильно или деббагер пытается куда то залесть не туда. вот код.

Модуль описания функций из длл, я его сам писал возможно здесь может быть ошибка. 
Код

unit WinDBR32;

interface

type
  lpszString = array [0..79] of char;
  YMDHM = record
           year   : integer;
           month  : integer;
           day    : integer;
           hour   : integer;
           minute : integer;
          end;
  lpYMDHM = ^YMDHM;
  MdbData = record
             value  : Longint;
             pname  : Integer;
             check  : Integer;
             diff   : Longint;
             ltype  : Integer;
             lvalue : Integer
            end;
 lpMdbData = ^MdbData;

 TBuffer = array[0..99] of char;
 lpTBuffer = array[1..5] of char;


  //function   MdbOpen (hWnd : THandle): THandle; stdcall; external 'WinDbr32';
  function   MdbClose (hDB : THandle): integer; stdcall; external 'WinDbr32';
  function   MdbOpenR (szFileName: Pchar): THandle; stdcall; external 'WinDbr32';
  function   MdbNext (hDB :THandle): boolean; stdcall; external 'WinDbr32';
  procedure  MdbReset (hDB :THandle); stdcall; external 'WinDbr32';
  //procedure  MdbReRead (hDB :THandle); stdcall; external 'WinDbr32';
  procedure  MdbSetCodeForm (hDB :THandle; nCodeForm:integer); stdcall; external 'WinDbr32';
  procedure  MdbSetObsStart (hDB :THandle; lpdtBegin: lpYMDHM); stdcall; external 'WinDbr32';
  procedure  MdbSetObsEnd (hDB :THandle; lpdtEnd: lpYMDHM); stdcall; external 'WinDbr32';
  //procedure  MdbClearObsInt (hDB :THandle); stdcall; external 'WinDbr32';
  //procedure  MdbSetObsInt (hDB :THandle; lpdtBegin: lpYMDHM; lDuration: longint); stdcall; external 'WinDbr32';
  procedure  MdbSetIndex (hDB: THandle; lIndex:longint);  stdcall; external 'WinDbr32';
  procedure  MdbSetPname (hDB: THandle; Pname: integer);  stdcall; external 'WinDbr32';
  function   MdbAddPname (hDB: THandle; Pname: integer):boolean;  stdcall; external 'WinDbr32';
  function   MdbGetIndex(hDB:THandle): longint; stdcall; external 'WinDbr32';
  function   MdbGetData(hDB: THandle; lpdbData: lpMdbData): boolean; stdcall; external 'WinDbr32';
  Function   MdbIsMultiPoint (hDB: THandle): boolean; stdcall; external 'WinDbr32';
  Function   MdbSkipPoints (hDB: THandle): boolean; stdcall; external 'WinDbr32';
  function   MdbGetObsTime(hDB: THandle; lpdtObsTime: lpYMDHM):boolean; stdcall; external 'WinDbr32';
 /// Procedure  MdbSetClear(hDB: THandle);stdcall; external 'WinDbr32';
  Procedure  MdbSetLevelType(hDB: THandle; nLevelType:integer);stdcall; external 'WinDbr32';
  Function   MdbGetCallSign (hDB: THandle; lpBuf:pointer; nSize: integer):integer;stdcall; external 'WinDbr32';
  procedure  MdbSetCallSign (hDB: THandle; szCallSign: lpTBuffer); stdcall; external 'WinDbr32';
  procedure  MdbSetIndexFilter (hDB: THandle; lpUserFunc: pointer; lParam: longint); stdcall; external 'WinDbr32';
  Function   MdbTell(hDB: THandle; wFlags:word; lpBuf:pointer; wSize:word):word; stdcall; external 'WinDBr32';
  Function   MdbGetPosSize(hDB: THandle; wFlags: word): word; stdcall; external 'WinDBr32';
  Function   MdbSeek(hDB: THandle; wFlags:word; lpBuf: pointer; wSize: word):boolean; stdcall; external 'WinDBr32';


 // Procedure  MdbSetPname(HDB: THandle; nPname:integer);stdcall; external 'WinDbr32';
Var
  szFilePath :Pchar;
  hDB, Hwnd :Thandle;
  hndDLLHandle: THandle;
  pMyMdbData : lpMdbData;
  DateBegin,DateEnd: YMDHM;
  pDB, pDE, pD, pTemp : lpYMDHM;

const
  NULL = 0;
  
implementation

end.


И просто код вызова функции
Код

Hdb:=MDBOpenR(Pchar('meteo.cdb')); //открываем базу
MdbClose(hDB); //закрываем бащу


Вот фишка вся в том что все работает без деббагера, все функции вызываются и тд.
К слову сервис пак стоит третий.

Автор: CodeMonkey 7.12.2010, 14:22
Кто такая WinDbr32 и как с ней работать - я так понимаю, мы должны угадать?

Автор: Burka 7.12.2010, 14:35
А что значит как с ней работать?
dll библиотека написанная на си, присланная из москвы для работы с метео базой, недавно было обновление, скорей всего из за которого эта ошибка и появилась. Если это поможет, то для этой длл после последнего обновления необходима установка MS Visual C++ 2005 SP1 Redistributable Package.
Так же длл требует наличие хасп ключа. Что еще я могу сказать?

Автор: Xenag 7.12.2010, 18:09
Вероятно срабатывает программная защита на обнаружении дебаггера.

Автор: CodeMonkey 7.12.2010, 20:32
Цитата(Burka @  7.12.2010,  15:35 Найти цитируемый пост)
Так же длл требует наличие хасп ключа


Цитата(Xenag @  7.12.2010,  19:09 Найти цитируемый пост)
Вероятно срабатывает программная защита на обнаружении дебаггера. 


Кстати, да.

Автор: Burka 7.12.2010, 21:37
Вполне возможно в новой версии что то добавили, хотя точно узнать будет проблематично

Автор: Juiko 7.10.2011, 11:16
Burka, а как проблему решили? отключили компилятор или исправили?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)