Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Трассировка вызова UDF в Firebird 2.5 / 25 сообщений из 54, страница 1 из 3
28.01.2016, 12:23
    #39157320
nicholaos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Здравствуйте!

В firebird.log есть ошибка вида:

The user defined function: USERFUNC
referencing entrypoint: UserFunc
in module: UserUDF.dll
caused the fatal exception: Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.

Подскажите, можно ли настроить include_filter в fbtrace.conf так, чтобы увидеть параметры вызова.
...
Рейтинг: 0 / 0
28.01.2016, 12:55
    #39157366
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaos,

нельзя.
Да и не нужно - поймаешь одну багу с одним параметром и пропустишь другую с другим.
...
Рейтинг: 0 / 0
28.01.2016, 13:15
    #39157404
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaos, UDF сами писали?
...
Рейтинг: 0 / 0
28.01.2016, 15:41
    #39157645
nicholaos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
hvlad, Спасибо за ответ.

DBConstructor, Да, самописная.
...
Рейтинг: 0 / 0
28.01.2016, 17:26
    #39157757
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaos, проверьте, что у вас все UDF функции в библиотеке описаны как __cdecl, а не __stdcall и что Firebird сервер, который цепляет эту библиотеку, имеет тот же тип бинарного образа (32 или 64 битный), что и ваша библиотека.
...
Рейтинг: 0 / 0
28.01.2016, 17:28
    #39157763
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Hello, Dbconstructor!
You wrote on 28 января 2016 г. 17:28:10:

Dbconstructor> и что Firebird сервер, который цепляет эту библиотеку,
> имеет тот же тип бинарного образа (32 или 64 битный), что и ваша библиотека.это просто шедевр!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2016, 17:39
    #39157777
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
DBConstructor,

...и вроде как ещё malloc/free нужно использовать специальные FB-шные
...
Рейтинг: 0 / 0
28.01.2016, 17:44
    #39157780
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Hello, Arioch!
You wrote on 28 января 2016 г. 17:44:18:

Arioch> и вроде как ещё malloc/free нужно использовать специальные FB-шныетолько в том случае, если

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2016, 17:48
    #39157783
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Мимопроходящий,

ну да

но и cdecl/stdcall далеко не всегда к AV приведет

и еще сотня другихх причин AV...
...
Рейтинг: 0 / 0
28.01.2016, 18:11
    #39157804
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Мимопроходящийэто просто шедевр!
Сейчас согласен. Затупил.
...
Рейтинг: 0 / 0
28.01.2016, 18:29
    #39157827
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
AriochDBConstructor,
...и вроде как ещё malloc/free нужно использовать специальные FB-шные
"free" недоступен, есть только ib_util_malloc, который используется для передачи серверу результата по ссылке и затем, выделенная память подчищается сервером.
...
Рейтинг: 0 / 0
29.01.2016, 09:26
    #39158197
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
DBConstructor,

Совсем недоступен?
...
Рейтинг: 0 / 0
29.01.2016, 10:10
    #39158249
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
WildSery, загляни в таблицу экспорта ib_util.dll
...
Рейтинг: 0 / 0
29.01.2016, 10:31
    #39158278
nicholaos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Ошибка возникает нестабильно, иногда раз в сутки, иногда раз в неделю.

Соглашение о вызове сишное
function UserFunc(Value1, Value2: PChar): PChar; cdecl; export;

И библиотека, и сервер 32 бита. Цепляет точно её.

Память под результирующую строку выделяется через ib_util_malloc
function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

Внутри функции весь код обрамлен try...except end, т.е. AV точно не внутри.

Подскажите, в чем может быть проблема.
...
Рейтинг: 0 / 0
29.01.2016, 10:32
    #39158279
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
DBConstructor,

Мне там ничего не нужно, я её не использую.
Так ты не ответил.
...
Рейтинг: 0 / 0
29.01.2016, 10:34
    #39158281
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
Дак врубай откладку из дельфей, цепляйся к серверу и пользуй сколько хочешь.

Покажи, чего там в коде функции?
...
Рейтинг: 0 / 0
29.01.2016, 10:34
    #39158282
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaosт.е. AV точно не внутри.
Уверен? Если пытаешься модифицировать входные параметры, то получаешь по рукам.
...
Рейтинг: 0 / 0
29.01.2016, 10:36
    #39158286
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaosPChar): PChar
Почему не PAnsiChar?
...
Рейтинг: 0 / 0
29.01.2016, 10:45
    #39158293
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaos, может в блоке try криво обработано исключение, возникающее при выходе за пределы страницы выделенной памяти при копировании строки в буфер результата? Когда выделяете буфер через ib_util_malloc, учитываете два байта на размер строки PChar?
...
Рейтинг: 0 / 0
29.01.2016, 10:47
    #39158296
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
nicholaos,

как ф-ция объявлена на SQL ?
...
Рейтинг: 0 / 0
29.01.2016, 10:51
    #39158301
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
WildSery, если ты уточнишь, что именно имеешь в виду, отвечу.
Мы обсуждаем передачу результата по ссылке из udf функции и выделение памяти для результата через общий с сервером менеджер памяти (ib_util.dll), в котором, со стороны udf библиотеки, отсутствует возможность самостоятельно освободить выделенную через ib_util_malloc память.
...
Рейтинг: 0 / 0
29.01.2016, 11:37
    #39158339
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
По поводу отладки: компилировать нужно в debug и с галочкой "Include remote debug symbols" в конфигурации линковки.
Копировать udf с файлом *.rsm вкуда положено для firebird.
Прежде чем цепляться к firebird необходимо хотя-бы раз дернуть библиотеку, чтобы она предварительно подгрузилась сервером.
Ide запускать под админом, и цепляться к firebird: в окне messages должно появиться сообщение, что ваша udf загружена и отладочная информация есть.
А дальше ставим бряки и наслаждаемся.
...
Рейтинг: 0 / 0
29.01.2016, 11:53
    #39158356
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
DBConstructor,

Не, всё не так. Ты как обычно обсуждаешь что-то своё, со слабой привязке к написанному другими.

Ты сказал, что "free" недоступен.
Я спросил "совсем недоступен?", и не получил внятного ответа, а вместо этого рассуждения о каком-то ib_util.dll
Так доступен "free" или нет?
...
Рейтинг: 0 / 0
29.01.2016, 12:12
    #39158376
DBConstructor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
WildSery, может ты не заметил, но "free" я нарочно взял в двойные кавычки, подразумевая именно функцию освобождения памяти через общий менеджер ib_util.dll, а не просто функцию std::free(void*). А о чем твой вопрос с привязкой к данному рассуждению о возврате значений из udf функций, я так и не понял.
...
Рейтинг: 0 / 0
29.01.2016, 13:46
    #39158444
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трассировка вызова UDF в Firebird 2.5
DBConstructor,

Может, ты не заметил, но до твоего упоминания ib_util.dll не участвовал в дискуссии. А вызывать alloc и free я могу сколько угодно, лишь бы при выходе всё корректно было вычищено.

Может, ты не заметил, но диплома телепата у меня нет, и догадываться, что ты подразумевал, я не могу. А потому и задал простой и конкретный вопрос. На который ты до сих пор не ответил, и не уточнил дополнительными словами своё некорректное первое высказывание.

Может, ты не заметил, но речь шла об ошибке при вызове UDF, а утверждение, что это именно ошибка с буфером в возвращаемом значении, ты высосал из пальца. Я не утверждаю, что это не может оказать правдой, но в UDF может быть и другие ошибки, приведшие к такому результату.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Трассировка вызова UDF в Firebird 2.5 / 25 сообщений из 54, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]