Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Добрый день всем гуру. Сегодня не пойму что произошло и начал сбоить код, который стабильно работал. Итак, студия Embarcadero 10.1 Berlin, ODAC 10.3.9. Есть модуль, который отвечает за обращение к БД через TOraStoredProc. unit PkMop; interface uses Classes, SysUtils, Ora, OraPackage, System.Variants, OraUtils, System.Generics.Collections, Data.DB, OraClasses, JclSysUtils; TPkMop = class(TCustomOraPackage) private FSession: TOraSession; procedure GetStoreProc; function GetSession: TOraSession; procedure SetSession(AValue: TOraSession); procedure SetParam(AParamName: string; AList: TList<Integer>); overload; procedure SetParam(AParamName: string; AList: TList<string>); overload; procedure SetParam(AParamName: string; AList: TList<Double>); overload; procedure SetParam(AParamName: string; AList: TList<Variant>); overload; procedure GetParam(AParamName: string; AList: TList<Integer>); overload; procedure GetParam(AParamName: string; AList: TList<string>); overload; procedure GetParam(AParamName: string; AList: TList<Double>); overload; protected StoredProc: TOraStoredProc; published property Name; property Session: TOraSession read GetSession write SetSession; public //тут сами вызовы end; implementation constructor TPkMop.Create(AOwner: TComponent); begin inherited; StoredProc := TOraStoredProc.Create(nil); end; procedure TPkMop.GetStoreProc; begin StoredProc.Session := Session; StoredProc.StoredProcName := '';//ошибка вылетает тут StoredProc.Prepared; end; GetStoreProc - инициализация компонента, несколько обращений к ней проходит нормально, но потом бьет ошибку. При повторном вызове вылетает AV. В чем может быть проблема? Заранее благодарю за конструктивный ответ |
27 мар 19, 17:56 [21845303] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
Отладчик используй. |
27 мар 19, 18:15 [21845315] Ответить | Цитировать Сообщить модератору |
devart Member Откуда: www.devart.com Сообщений: 1175 |
Пожалуйста уточните, в качестве StoredProcName Вы указываете именно значение '', либо-же имя какой-то определенной хранимой процедуры ? Во втором случае, можете ли Вы предоставить DDL-скрипт для ее создания |
27 мар 19, 18:21 [21845321] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Вылетает исключительно на пустом значении. Причем один раз отрабатывает правильно, второй раз уже бьет ошибку. Убирал процедуру инициализации TOraStoredProc, било и на существующем имени процедуры. Но опять начиная со второго раза. |
||
27 мар 19, 19:00 [21845350] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Foxpc, используя отладчик я нашел место где оно вылетает. Код для чего я приложил? |
27 мар 19, 19:06 [21845356] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
Леонов Юрий, он имел ввиду внутри сеттера StoredProcName |
27 мар 19, 19:12 [21845363] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
у меня нет исходников, чтобы внутри лазить. К тому же до сегодняшнего дня все работало отлично. Проверил все изменения - никто в данном разделе ничего не правил. Остается только гадать, откуда вылезла эта ошибка. |
||
27 мар 19, 19:23 [21845376] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
Мне почему то кажется, что память потекла где - то. Такое часто бывает, когда она течёт. К примеру кто то двинул указатель строки, и не вернул на место. И вот, такие трюки идут по одному месту Так что, может быть виноват любой код. И искать такие ошибки можно пару месяцев |
27 мар 19, 19:46 [21845398] Ответить | Цитировать Сообщить модератору |
Cobalt747 Member Откуда: Сообщений: 2250 |
Вангую освобождение (Free) объекта |
28 мар 19, 07:03 [21845639] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Объект создается вызовом извне (конструктором Create) и удаляется тоже извне (вызовом Destroy). Пока живет форма, до тех пор живет и этот компонент. Код не менялся, просто резко начали сыпаться ошибки |
||
28 мар 19, 09:52 [21845757] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
какую???
но сейчас не работает ищи либо место, где ошибка проявляется (если раньше не проявлялась, не значить что ее не было, возможно просто не проявлялась) либо то изменение в твоей программе или БД, которое помогло ошибке проявиться |
||||
28 мар 19, 11:50 [21845924] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Внимательно читаем заголовок темы
Она проявляется в разных местах, но всегда на строке типа
StoredProc.StoredProcName := 'имя процедуры';
Причем имя может быть как пустой строкой, так и реальным из БД |
||||||||
28 мар 19, 16:59 [21846363] Ответить | Цитировать Сообщить модератору |
X11 Member Откуда: Kharkiv, Ukraine Сообщений: 14896 |
конкретнее |
||
28 мар 19, 17:06 [21846371] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
Леонов Юрий, если что, он просит полный стэк, в левом верхнем углу. Со всеми подробностями |
28 мар 19, 17:14 [21846381] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
Такие ошибки очень сложно ищаться. Если это утечка памяти. А тс ничего не хочет приводить в пример кода, кроме того участка, где проявляется диагноз |
28 мар 19, 17:15 [21846385] Ответить | Цитировать Сообщить модератору |
ёёёёё Member Откуда: Сообщений: 2017 |
Ошибка
Солнышко, такая ошибка в указанном месте "вылетать" не может. Придется тебе рыть внутри сеттера свойства StoredProcName и, возможно, еще глубже. |
||||
28 мар 19, 17:50 [21846447] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
ёёёёё, мне кажется разрабы Ora хорошо отладили свой код. Так что вряд ли к ним есть притенения |
28 мар 19, 18:15 [21846485] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
К тому же есть глянуть, это обычныйproperty StoredProcName: string; |
28 мар 19, 18:16 [21846487] Ответить | Цитировать Сообщить модератору |
ёёёёё Member Откуда: Сообщений: 2017 |
Ну вот они тебе нормальное сообщение и выдали, а не какой-нибудь "AV".
Ой, неграмотный какой. Ну ты попробуй в своем коде тоже так проперь задекларировать, без указания имплементации. |
||||
28 мар 19, 18:24 [21846493] Ответить | Цитировать Сообщить модератору |
Foxpc Member Откуда: Сообщений: 162 |
ёёёёё, Ясно. Дурачoк какой то ты. ТС говорил что у него ошибка, при присвоение любого текста к обычному свойству, созданного объекта Так что, не надо тут умничать как будто ты всё знаешь. Моя позиция - утечка памяти, в где то в проекте. Строки могут совершенно никак между собою связаны. Просто менеджер памяти испорчен. |
28 мар 19, 18:53 [21846525] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Кода дохрена, весь проект приводить смысла не вижу. |
||
29 мар 19, 09:39 [21846790] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Солнышко??? Я похож на блондинку? То есть вы считаете, что я выдумал проблему? Повторяюсь, исходников у меня нет, рыть в глубь, соответственно, тоже не могу |
||
29 мар 19, 09:41 [21846792] Ответить | Цитировать Сообщить модератору |
Леонов Юрий Member Откуда: Украина, Харьков Сообщений: 569 |
Поискал исходники, нашел правда не совсем свежие. Данная ошибка может вылетать только на инициализации процедурных переменных. Но присвоение пустой строки не должно вызывать эту инициализацию... В чем глюк - не пойму. Может прав Foxpc и тут проблемы не касаются напрямую компонента... |
29 мар 19, 10:21 [21846823] Ответить | Цитировать Сообщить модератору |
Cobalt747 Member Откуда: Сообщений: 2250 |
Леонов Юрий, Сделай поиск по всему проекту с вызовом Free или Destroy. |
29 мар 19, 11:00 [21846855] Ответить | Цитировать Сообщить модератору |
Arioch Member Откуда: Сообщений: 11101 |
....а там окажется освобождение через ARC или TComponent.Owner или ещё как вообще, ты что найти пытаешься, use after free? для этого проще FreeMem перекрыть, чтобы всю свежеотпущенную память забивала каким-нибудь $DeadBeef и смотреть где в разнос пойдёт. Кстати в Windows LAllocMem/LFreeMem таки память затирают на освобождении (они на скорость не претендуют, так что могут себе позволить). Когда я писал "рекордный" плагин - DLL размером 2KB - то именно так нашёл баг в хостовом приложении, при исключении из Delphi 5 RTL "стандартного" heap manager всё начинало сыпаться. |
||
29 мар 19, 12:10 [21846944] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Delphi | ![]() |