-
Есть программа и 12 dll. В dpr стоит в первых строках JclStackTrackingOptions := [stExceptFrame, stStack, stRawMode, stAllModules, stStaticModuleList];
JclStartExceptionTracking;
JclAddExceptNotifier(LogException); соответственно проседура procedure LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean);
var
mmLog: String;
ModInfo: TJclLocationInfo;
begin
try
ModInfo := GetLocationInfo(ExceptAddr);
mmLog:=Format(
#13#10+'Exception occured at $%p '+#13#10+
'Module \"%s\"'+#13#10+
'Procedure \"%s\"'+#13#10+
'Unit \"%s\"'+#13#10+
'Line %d',
[ModInfo.Address,
ModInfo.UnitName,
ModInfo.ProcedureName,
ModInfo.SourceName,
ModInfo.LineNumber]);
WriteToLog(mmLog);
Except
end;
end; Вчера все работало. Сегодня поправил 2 из них(написал несколько отправок сообщений главной форме app по нажатию на кнопки). Лог DateTime: 21.10.2008 11:31:26 NumeroQuattro.Департамент: module NQItem.dll attach process ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26 NumeroQuattro.Департамент: module NQItemGroup.dll attach process ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26 Exception occured at $7C812A5B Module "" Procedure "RaiseException" Unit "" Line 0----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26 NumeroQuattro.Департамент: module NQReport.dll attach processdll NQItemGroup.dll не трогал сегодня вообще!! что она из себя представляет: форма, на ней cxDBTreeList(DevExpress), панель, 4кнопки Соответственно, отображает дерево из БД, можно выбрать что-то. И "что-то" засылается сообщением далее. Да это и не важно. После этой ошибки дерево при вызове пустое. Данные не считались. Все dll делаются по шаблону. Эта - единственная, где исп. cxDBTreeList. Везде в других исп. cxGrid, едиты, комбо, и т.п. Тут тоже, но + cxDBTreeList. То ли с ним проблемы, то ли с чем? Есть какие мысли?
-
ничего не понимаю.. А судя по стеку
NQ.LogException(???,$7C812A5B,???) JclHookExcept.TNotifierItem.DoNotify(???,???,True) JclHookExcept.DoExceptNotify($196F0F0,$7C812A5B,True) JclHookExcept.HookedExceptObjProc(???) :51f26b4d @HandleAnyException + $35 :7c90378b ntdll.RtlConvertUlongToLargeInteger + 0x46 :7c90eafa ntdll.KiUserExceptionDispatcher + 0xe :030d0258 SetThreadName + $48 :0310b793 IdThread + $13 :51f2747c @StartLib + $C4 :7c9011a7 ntdll.LdrInitializeThunk + 0x29 :7c91cbab ; ntdll.dll :7c916178 ; ntdll.dll :7c9162da ; ntdll.dll :7c801bb9 kernel32.LoadLibraryExW + 0xc8 :7c801d6e kernel32.LoadLibraryExA + 0x1f :7c801da4 kernel32.LoadLibraryA + 0x2d formMain.TfrmMain._LoadLibrary(???,'NQReport',('Software', 'ЗАО «ТД «ПЕРЕКРЕСТОК»', 'NQ', 'User', 'Owner', 'NQ', 'NumeroQuattro.Департамент', 'C:\delphi\nq\NQ.ini', True, (18, 29376, 20997, 29384)),$17C26A0) formMain.TfrmMain._LoadLibraries($17BB470,$17EFEE0,$17C26A0) formMain.TfrmMain.Create(???) :5207946c TApplication.CreateForm + $34 NQ.NQ :7c816fd7 kernel32.RegisterWaitForInputIdle + 0x49
NQReport.dll лажанулась .. (впрочем, ее тоже не трогал)
-
а в секции initialization там есть что-нить?
-
нет, ничего нет. Все что возможно загнал в try except WriteToLog('ТУТ!!'); (да все вообще, почти каждую строчку) Все прошел по F8-F7, не пойму где ошибка..
-
> [3] Vlad Oshin © (21.10.08 14:24)
в опциях компилятора Run time errors включи range checking и поработай с программой в разных режимах. скорее всего что-то где-то явно портит память процесса. возможно поможет выявить это место замена Free на FreeAndNil в спорных местах.
-
> в опциях компилятора Run time errors включи range checking
включено > Free на FreeAndNil в спорных местах.
заменил на Free и :=nil, во всех местах ничего.. ----------------- переписал
procedure LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean);
var
mmLog: String;
ModInfo: TJclLocationInfo;
begin
try
ModInfo := GetLocationInfo(ExceptAddr);
mmLog:=Format(
#13#10+'Exception occured at $%p '+#13#10+
'Module \"%s\"'+#13#10+
'Procedure \"%s\"'+#13#10+
'Unit \"%s\"'+#13#10+
'Line %d',
[ModInfo.Address,
ModInfo.UnitName,
ModInfo.ProcedureName,
ModInfo.SourceName,
ModInfo.LineNumber]);
WriteToLog(mmLog+' '+SysErrorMessage(GetLastError));
Except
end;
end;
поменял порядок загрузки dll, теперь явно видно, что хромает Report, где бы не стояла - на ней ошибается Try LoadLibrary |NQBasket| ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07 NumeroQuattro.Департамент: module NQBasket.dll attach process ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07 Try LoadLibrary |NQReport| ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07 Exception occured at $7C812A5B Module "" Procedure "RaiseException" Unit "" Line 0 Не удается найти указанный файл ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07 NumeroQuattro.Департамент: module NQReport.dll attach processОтключил в ней возможности передачи отчета по почте IdMessage, IdCoderHeader,IdAttachmentFile,IdText, idSMTP Заработало. Чем indy может так шалить?
-
> [5] Vlad Oshin © (21.10.08 15:26)
скорее всего не все так просто. это самый страшный тип ошибки, она может возникать где угодно, при значительном изменении структуры кода (добавление/удаление какого либо модуля) может вообще, казалось бы, исчезнуть. поищи в своем коде, касающимся Indy и писем ошибки, но вряд ли найдешь думаю.. ошибка в каком-то "левом" месте.. возможно при инициализации/загрузки чего то, imho с этой стороны копать надо.
-
> IdMessage, IdCoderHeader,IdAttachmentFile,IdText, idSMTP
смотри, что там может косячить в initialization
-
а uses sharemem в первых строках соит?
-
> Petr V. Abramov © (21.10.08 16:43) [8] > а uses sharemem в первых строках соит?
использую Fast Memory Manager 4.84
|