Ошибка dac140.bpl AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов

Ответить
vostden
Сообщения: 4
Зарегистрирован: Чт 28 дек 2017 05:50

Ошибка dac140.bpl AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)

Сообщение vostden » Пн 29 янв 2018 09:23

Установлен ODAC 10.1.4.

Периодически возникает ошибка:
AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas, line 8624)


К сожалению, алгоритм воспроизведения - неизвестен.
Предположительно, при вызове метода Cancel у TOraQuery.

Вариации Call stack:

1. Здесь ошибки не было

Код: Выделить всё

U_ILL.TFrm_ILL.O_ILLBeforeCancel($13A15D20)
:506947ef TDataSet.DoBeforeCancel + $1B
:0546794a TDASQLGenerator.GenerateRefreshSQLFromPart + $A
2. Тот же блок кода, что и в п.1., но уже имеем ошибку

Код: Выделить всё

:7616c54f KERNELBASE.RaiseException + 0x58
:05b90d09 RaiseExceptionProcHook + $71
:0536bdf2 TStringHeap.ReAllocWideStr + $2
с результирующим сообщением "AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)"
---
Возможно пригодятся данные с CPU

Код: Выделить всё

; Memdata.TStringHeap. (possible DisposeBuf+560) (Line=0 - Offset=560)
; --------------------------------------------------------------------
05C0BDC0  6C          INSB
05C0BDC1  006500      ADD   [EBP], AH
05C0BDC4  640000      ADD   FS:[EAX], AL
05C0BDC7  005356      ADD   [EBX+$56], DL
05C0BDCA  85D2        TEST  EDX, EDX
05C0BDCC  742A        JZ    +$2A                 ; ($05C0BDF8) Memdata.TStringHeap.AddRef (Line=0)
05C0BDCE  8BDA        MOV   EBX, EDX
05C0BDD0  83C3FE      ADD   EBX, -2
05C0BDD3  8BC3        MOV   EAX, EBX
05C0BDD5  0FB730      MOVZX ESI, WORD PTR [EAX]
05C0BDD8  6683FE65    CMP   SI, $65
05C0BDDC  7314        JNB   +$14                 ; ($05C0BDF2) Memdata.TStringHeap.AddRef (Line=0)
05C0BDDE  B924220000  MOV   ECX, $00002224
05C0BDE3  BA08BEC005  MOV   EDX, $05C0BE08       ; ($05C0BE08) Memdata.TStringHeap. (possible AddRef+64) (Line=0) UNICODE: 'C:\Users\dev15\Documents\!DbgFiles\odac_src\odac101src\ODAC\Source\MemData.pas'
05C0BDE8  B8B4BEC005  MOV   EAX, $05C0BEB4       ; ($05C0BEB4) Memdata.TStringHeap. (possible AddRef+236) (Line=0) UNICODE: 'AddRefStr failed'
;
; Memdata.TStringHeap.AddRef (Line=0 - Offset=37)
; -----------------------------------------------
05C0BDED  E8BE53FDFF  CALL  -$02AC42             ; ($05BE11B0->5000B904) System.Assert  ; <-- EXCEPTION
05C0BDF2  8BC3        MOV   EAX, EBX
05C0BDF4  46          INC   ESI
05C0BDF5  668930      MOV   [EAX], SI
05C0BDF8  5E          POP   ESI
05C0BDF9  5B          POP   EBX

; ------------------
056FBBE2  E8C955FDFF    CALL  -$02AA37             ; ($056D11B0->5000B904) System.Assert  ; <-- EXCEPTION
056FBBE7  6683FB65      CMP   BX, $65
056FBBEB  0F8580000000  JNZ   +$80                 ; ($056FBC71) Memdata.TStringHeap.DisposeBuf (Line=0)
056FBBF1  8BC6          MOV   EAX, ESI
056FBBF3  4B            DEC   EBX
056FBBF4  668918        MOV   [EAX], BX
056FBBF7  8BC6          MOV   EAX, ESI
056FBBF9  83C0FC        ADD   EAX, -4
056FBBFC  8B00          MOV   EAX, [EAX]
056FBBFE  8D5808        LEA   EBX, [EAX+8]
056FBC01  4B            DEC   EBX
056FBC02  85DB          TEST  EBX, EBX
056FBC04  7903          JNS   +3                   ; ($056FBC09) Memdata.TStringHeap.DisposeBuf (Line=0)
056FBC06  83C307        ADD   EBX, 7
056FBC09  C1FB03        SAR   EBX, 3
056FBC0C  85DB          TEST  EBX, EBX
056FBC0E  7514          JNZ   +$14                 ; ($056FBC24) Memdata.TStringHeap.DisposeBuf (Line=0)
Предоставим любую необходимую информацию для решения вопроса.
Спасибо!

ViktorV
Devart Team
Сообщения: 193
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Ошибка dac140.bpl AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)

Сообщение ViktorV » Пн 29 янв 2018 10:58

К сожалению, нам не удалось воспроизвести проблему. Чтобы понять причину возникновения проблемы и найти решение для ее исправления, нам необходим тестовый пример, в котором проблема стабильно воспроизводится. Как только мы получим такой пример и, если причина проблемы будет в коде нашего продукта, мы постараемся в кратчайшие сроки ее исправить. Пожалуйста, составьте и вышлите нам, с помощью контактной формы https://www.devart.com/company/contactform.html, полный пример, демонстрирующий указанное вами поведение, включающий скрипты для создания и заполнения объектов БД.

Ответить