|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Здравствуйте! В 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 так, чтобы увидеть параметры вызова. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 12:23 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, нельзя. Да и не нужно - поймаешь одну багу с одним параметром и пропустишь другую с другим. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 12:55 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, UDF сами писали? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 13:15 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
hvlad, Спасибо за ответ. DBConstructor, Да, самописная. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 15:41 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, проверьте, что у вас все UDF функции в библиотеке описаны как __cdecl, а не __stdcall и что Firebird сервер, который цепляет эту библиотеку, имеет тот же тип бинарного образа (32 или 64 битный), что и ваша библиотека. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 17:26 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Hello, Dbconstructor! You wrote on 28 января 2016 г. 17:28:10: Dbconstructor> и что Firebird сервер, который цепляет эту библиотеку, > имеет тот же тип бинарного образа (32 или 64 битный), что и ваша библиотека.это просто шедевр! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 17:28 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructor, ...и вроде как ещё malloc/free нужно использовать специальные FB-шные ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 17:39 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Hello, Arioch! You wrote on 28 января 2016 г. 17:44:18: Arioch> и вроде как ещё malloc/free нужно использовать специальные FB-шныетолько в том случае, если Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 17:44 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Мимопроходящий, ну да но и cdecl/stdcall далеко не всегда к AV приведет и еще сотня другихх причин AV... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 17:48 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Мимопроходящийэто просто шедевр! Сейчас согласен. Затупил. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 18:11 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
AriochDBConstructor, ...и вроде как ещё malloc/free нужно использовать специальные FB-шные "free" недоступен, есть только ib_util_malloc, который используется для передачи серверу результата по ссылке и затем, выделенная память подчищается сервером. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2016, 18:29 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructor, Совсем недоступен? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 09:26 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
WildSery, загляни в таблицу экспорта ib_util.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:10 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Ошибка возникает нестабильно, иногда раз в сутки, иногда раз в неделю. Соглашение о вызове сишное 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 точно не внутри. Подскажите, в чем может быть проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:31 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructor, Мне там ничего не нужно, я её не использую. Так ты не ответил. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:32 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Дак врубай откладку из дельфей, цепляйся к серверу и пользуй сколько хочешь. Покажи, чего там в коде функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:34 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosт.е. AV точно не внутри. Уверен? Если пытаешься модифицировать входные параметры, то получаешь по рукам. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:34 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosPChar): PChar Почему не PAnsiChar? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:36 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, может в блоке try криво обработано исключение, возникающее при выходе за пределы страницы выделенной памяти при копировании строки в буфер результата? Когда выделяете буфер через ib_util_malloc, учитываете два байта на размер строки PChar? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:45 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, как ф-ция объявлена на SQL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:47 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
WildSery, если ты уточнишь, что именно имеешь в виду, отвечу. Мы обсуждаем передачу результата по ссылке из udf функции и выделение памяти для результата через общий с сервером менеджер памяти (ib_util.dll), в котором, со стороны udf библиотеки, отсутствует возможность самостоятельно освободить выделенную через ib_util_malloc память. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 10:51 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
По поводу отладки: компилировать нужно в debug и с галочкой "Include remote debug symbols" в конфигурации линковки. Копировать udf с файлом *.rsm вкуда положено для firebird. Прежде чем цепляться к firebird необходимо хотя-бы раз дернуть библиотеку, чтобы она предварительно подгрузилась сервером. Ide запускать под админом, и цепляться к firebird: в окне messages должно появиться сообщение, что ваша udf загружена и отладочная информация есть. А дальше ставим бряки и наслаждаемся. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 11:37 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructor, Не, всё не так. Ты как обычно обсуждаешь что-то своё, со слабой привязке к написанному другими. Ты сказал, что "free" недоступен. Я спросил "совсем недоступен?", и не получил внятного ответа, а вместо этого рассуждения о каком-то ib_util.dll Так доступен "free" или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 11:53 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
WildSery, может ты не заметил, но "free" я нарочно взял в двойные кавычки, подразумевая именно функцию освобождения памяти через общий менеджер ib_util.dll, а не просто функцию std::free(void*). А о чем твой вопрос с привязкой к данному рассуждению о возврате значений из udf функций, я так и не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 12:12 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructor, Может, ты не заметил, но до твоего упоминания ib_util.dll не участвовал в дискуссии. А вызывать alloc и free я могу сколько угодно, лишь бы при выходе всё корректно было вычищено. Может, ты не заметил, но диплома телепата у меня нет, и догадываться, что ты подразумевал, я не могу. А потому и задал простой и конкретный вопрос. На который ты до сих пор не ответил, и не уточнил дополнительными словами своё некорректное первое высказывание. Может, ты не заметил, но речь шла об ошибке при вызове UDF, а утверждение, что это именно ошибка с буфером в возвращаемом значении, ты высосал из пальца. Я не утверждаю, что это не может оказать правдой, но в UDF может быть и другие ошибки, приведшие к такому результату. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 13:46 |
|
|
start [/forum/topic.php?fid=40&msg=39157366&tid=1562367]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 259ms |
total: | 417ms |
0 / 0 |