powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дополнительная информация при ошибке в UDF
25 сообщений из 52, страница 1 из 3
Дополнительная информация при ошибке в UDF
    #39134020
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня приключилась вот такая ситуация:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BADGER (Server)	Tue Dec 22 10:20:02 2015
	The user defined function: 	FORMAT_DATE
	   referencing entrypoint: 	FormatDate                     
	                in module: 	gm_udf
	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.


BADGER (Server)	Tue Dec 22 10:20:02 2015
	Shutting down the server with 48 active connection(s) to 2 database(s), 0 active service(s)

Вопрос разработчикам: можно ли расширить эти сообщения, чтобы в первом случае сообщалось, под каким пользователем выполнялся запрос с этой UDF и в какой базе, а во втором случае, какие именно базы были закрыты.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134103
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxпод каким пользователем выполнялся запрос с этой UDF и в какой базе, а во втором случае, какие именно базы были закрыты.
Кривая udf завалит любой сервер.

П.С. Ставлю рубль на то, что "formatdate" просто написана криво, потому что сервер вряд-ли дает ей кривые данные...
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134111
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Сервер в лице какого-то пользователя (разработчика) передал туда кривые данные. Я хочу знать, кто это был, чтобы выяснить, что там такое было, и на какой базе.
P.S. С ошибкой в UDF, конечно же, разберемся.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134115
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxСервер в лице какого-то пользователя (разработчика) передал туда кривые данные.
Давай рассмотрим с другой стороны: что туда можно передать кривого? Пустую строку?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function DateTimeToChar(var IBDateTime: TIBDateTime; sz: PAnsiChar): PAnsiChar; cdecl; export;
var d: TDateTime;
    u: UTF8String;
    fs: TFormatSettings;
begin
    fs := TFormatSettings.Create;
    with IBDateTime do
        d := Days - IBDateDelta + MSec10 / MSecsPerDay10;
    u := FormatDateTime(UTF8String(sz), d, fs);
    Result := ib_util_malloc(Length(u)+1);
    StrCopy(Result, PAnsiChar(u));
end;


Дак и на выходе будет пустая строка.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134162
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax, к сожалению, чтобы udf могла автоматически (без явной передачи через аргументы) получать хоть какую-то информацию от сервера, надо расширять функционал ib_util.dll. Иначе - только через аргументы функции.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134166
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Камрад, ты чего оффтопишь? Какая разница, что там в UDF? Это может быть абсолютно любая функция, в том числе состоящая из строки raise Exception.Create. Я спрашиваю про расширение диагностики от сервера, а не про то, как написать функцию, в которой не будет необработанных исключений.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134168
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorCyberMax, к сожалению, чтобы udf могла автоматически (без явной передачи через аргументы) получать хоть какую-то информацию от сервера, надо расширять функционал ib_util.dll. Иначе - только через аргументы функции.
Сообщение в логе формирует сервер в момент падения. Вопрос: при чем тут передача информации от сервера в UDF?
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134172
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

в UDR (FB 3) можно получить любую инфу от сервера без проблем. Но их надо научится готовить. Это немного сложнее чем написать UDF.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134175
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

не факт что в момент падения можно вытащить информацию о пользователе который его вызвал
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134178
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax, если udf функция может поймать исключение через try/catch блок и обработать, то достаточно получить информацию о контексте транзакции и сохранить необходимую информацию в журнал событий. Вопрос только в том, как получить информацию о контексте транзакции.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134179
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисDBConstructor, в UDR (FB 3) можно получить любую инфу от сервера без проблем. Но их надо научится готовить. Это немного сложнее чем написать UDF.
Обнадёживающе.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134182
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorCyberMax, если udf функция может поймать исключение через try/catch блок и обработать, то достаточно получить информацию о контексте транзакции и сохранить необходимую информацию в журнал событий. Вопрос только в том, как получить информацию о контексте транзакции.
Какой еще журнал событий? Какой контекст транзакции? Ты тычешь пальцем в небо.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134202
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>fatal exception: Access violation.

Гарантированно только дамп можно получить, и из него выколупывать.

Кибермах 5й год сногается с gm_udf, судя по форуму.

P.S. Весьма плохая идея совать внутрь сервера (любого процесса) код от другого компилятора.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134208
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxКакой еще журнал событий?
Любой. В таком варианте хоть на syslogd отправляй - без разницы.
Но было бы идеально, если бы ib_util предоставляла возможность записи в log файл сервера Firebird.

CyberMaxКакой контекст транзакции?
Идентификатор пользователя, идентификатор транзакции и т.д.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134212
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглP.S. Весьма плохая идея совать внутрь сервера (любого процесса) код от другого компилятора.
Интересное мнение... Обоснуй.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134226
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorЗимарглP.S. Весьма плохая идея совать внутрь сервера (любого процесса) код от другого компилятора.
Интересное мнение... Обоснуй.
"У меня не получилось". (с)
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134231
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглГарантированно только дамп можно получить, и из него выколупывать.
Не надо никакого дампа.

ЗимарглКибермах 5й год сногается с gm_udf, судя по форуму.
Дык. Сам пишу - сам сношаюсь же.

ЗимарглP.S. Весьма плохая идея совать внутрь сервера (любого процесса) код от другого компилятора.
Какого другого? dll состоит из машинного кода, который все равно, чем и как сформирован.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134234
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

Я тебя умоляю, не пиши в эту тему больше.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134240
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фигней занимаетесь, господа )))
вот сделать obj client для компиляции в ехе было бы классно
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134256
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CyberMaxЗимарглP.S. Весьма плохая идея совать внутрь сервера (любого процесса) код от другого компилятора.
Какого другого? dll состоит из машинного кода, который все равно, чем и как сформирован.
Судя по статистике, многие не понимают промежуточные этапы, что именно "отсебя" добавляет компилятор в машинный код. Не учитывают ньюансы и в итоге подобные проблемы. А ньюансов много.

Была статья на stackoveflow, Но сходу повторно не нашел.

Вкратце, что по разному обрабатывается - классы, стек, потоки, исключения, динамическая память. Наверняка что то спросонья еще забыл.

На этом же форуме много раз писали правильную вещь - избавляйтесь от UDF.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134260
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorCyberMaxКакой контекст транзакции?
Идентификатор пользователя, идентификатор транзакции и т.д.

никто не будет это делать для UDF. UDF имеют множество ограничений и на данный момент это считается Legacy внешними функциями. В UDR это уже есть. На Delphi их тоже можно писать. Сейчас как раз с этим разбираюсь. Даже кое-что удалось сделать.

Кстати я сомневаюсь что ты сможешь перехватить Access violation в коде UDF
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134269
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКстати я сомневаюсь что ты сможешь перехватить Access violation в коде UDF
Т.е. обращение по нулевому указателю я могу поймать в try блоке, а "Access violation" нет?
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134288
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКстати я сомневаюсь что ты сможешь перехватить Access violation в коде UDF
Можно. Это обычное исключение.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134296
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructor,

а где гарантия что Access violation произошёл внутри UDF, а не в момент освобождения выделенной в ней памяти движком FB? Хотя текст ошибки вроде указывает на это.
...
Рейтинг: 0 / 0
Дополнительная информация при ошибке в UDF
    #39134304
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Денис, чего ты за AV зацепился? FB падает при любом необработанном исключении в udf.

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


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