PDA

Просмотр полной версии : [Вопрос] "Флуд" в mysql_log:



StevenH
26.01.2016, 22:33
Доброго времени суток. Переодически в мускул лог, вот что выскакивает:


[18:20:28] [WARNING] cache_get_field_content - no active cache
[18:20:28] [WARNING] cache_get_field_content - no active cache
[18:20:28] [WARNING] cache_get_field_content - no active cache
[18:36:19] [WARNING] cache_get_field_content - no active cache
[18:36:19] [WARNING] cache_get_field_content - no active cache
[18:36:19] [WARNING] cache_get_field_content - no active cache
[18:46:55] [WARNING] cache_get_field_content - no active cache
[18:46:55] [WARNING] cache_get_field_content - no active cache


Самое главное, я не знаю откуда это именно... В моде данных строк - полно.

Daniel_Cortez
26.01.2016, 22:46
Если использовать компилятор от Zeex, в котором добавлена константа __line, содержащая номер текущей строки в коде, то можно перехватить все вызовы cache_get_field_content, чтобы добавить вывод __line в консоль.

Я бы показал код, но очень охота спать и вряд ли получится без ошибок. Возможно, завтра с утра, если меня никто не опередит с реализацией идеи.

StevenH
26.01.2016, 23:58
Если использовать компилятор от Zeex, в котором добавлена константа __line, содержащая номер текущей строки в коде, то можно перехватить все вызовы cache_get_field_content, чтобы добавить вывод __line в консоль.

Я бы показал код, но очень охота спать и вряд ли получится без ошибок. Возможно, завтра с утра, если меня никто не опередит с реализацией идеи.

Буду ждать :)

VVWVV
27.01.2016, 00:06
Если использовать компилятор от Zeex, в котором добавлена константа __line, содержащая номер текущей строки в коде, то можно перехватить все вызовы cache_get_field_content, чтобы добавить вывод __line в консоль.

Я бы показал код, но очень охота спать и вряд ли получится без ошибок. Возможно, завтра с утра, если меня никто не опередит с реализацией идеи.

Т.е. вы про это?

cache_get_field_content(/*...*/), printf("Line: %d", __line);

ziggi
27.01.2016, 00:20
Т.е. вы про это?

cache_get_field_content(/*...*/), printf("Line: %d", __line);

Нет, он про это:


stock DEBUG_cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination))
{
printf("line %d: cache_get_field_content(%d, \"%s\", \"%s\", %d, %d)", __line, row, field_name, destination, connectionHandle, max_len);
return cache_get_field_content(row, field_name, destination, connectionHandle, max_len);
}
#if defined _ALS_cache_get_field_content
#undef cache_get_field_content
#else
#define _ALS_cache_get_field_content
#endif

#define cache_get_field_content DEBUG_cache_get_field_content

Автор, вставляй этот код перед всеми вызовами cache_get_field_content, бери компилятор отсюда: https://github.com/Zeex/pawn/releases, компилируй, запускай и смотри логи.

Хотя я не уверен в том, что это сработает, ведь номер строки берётся у вызова printf, а он всегда находится на одном месте.

UPD: Ниже исправленный вариант.

StevenH
27.01.2016, 00:24
Нет, он про это:


stock DEBUG_cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination))
{
printf("line %d: cache_get_field_content(%d, \"%s\", \"%s\", %d, %d)", __line, row, field_name, destination, connectionHandle, max_len);
return cache_get_field_content(row, field_name, destination, connectionHandle, max_len);
}
#if defined _ALS_cache_get_field_content
#undef cache_get_field_content
#else
#define _ALS_cache_get_field_content
#endif

#define cache_get_field_content DEBUG_cache_get_field_content

Автор, вставляй этот код перед всеми вызовами cache_get_field_content, бери компилятор отсюда: https://github.com/Zeex/pawn/releases, компилируй, запускай и смотри логи.

Хотя я не уверен в том, что это сработает.

Cпасибо. И вопрос, куда эти файлы кидать? И вообще зачем компилятор для Linux?

ziggi
27.01.2016, 00:31
Cпасибо. И вопрос, куда эти файлы кидать? И вообще зачем компилятор для Linux?

В общем, я лопухнулся. Правильно будет так (но я не уверен):


#define cache_get_field_content%0 printf("cache_get_field_content: line %d", __line);cache_get_field_content%0

Файлы кидать в каталог pawno (скорее всего ты пользуешься именно им) с заменой существующих.
А компилятор для Linux нужен для того, чтобы компилировать скрипты из-под Linux. Раз спрашиваешь, то тебе этот компилятор не нужен.

Daniel_Cortez
27.01.2016, 10:43
В общем, я лопухнулся. Правильно будет так (но я не уверен):


#define cache_get_field_content%0 printf("cache_get_field_content: line %d", __line);cache_get_field_content%0

Файлы кидать в каталог pawno (скорее всего ты пользуешься именно им) с заменой существующих.
А компилятор для Linux нужен для того, чтобы компилировать скрипты из-под Linux. Раз спрашиваешь, то тебе этот компилятор не нужен.
У меня этот макрос привёл к зависанию компилятора (скорее всего, из-за рекурсии).
Ок, как и обещал:


stock debug_cache_get_field_content(line, row, const field_name[], destination[],
connectionHandle = 1, max_len = sizeof(destination))
{
printf("cache_get_field_content: line %d", line);
return cache_get_field_content(row, field_name, destination, connectionHandle, max_len);
}
#if defined _ALS_cache_get_field_content
#undef cache_get_field_content
#else
#define _ALS_cache_get_field_content
#endif
#define cache_get_field_content(%0) debug_cache_get_field_content(__line,%0)

У меня нет плагина для работы с MySQL, чтобы проверить код, но я проверил этот метод, перехватив функцию heapspace и всё сработало.

StevenH
27.01.2016, 15:15
У меня этот макрос привёл к зависанию компилятора (скорее всего, из-за рекурсии).
Ок, как и обещал:


stock debug_cache_get_field_content(line, row, const field_name[], destination[],
connectionHandle = 1, max_len = sizeof(destination))
{
printf("cache_get_field_content: line %d", line);
return cache_get_field_content(row, field_name, destination, connectionHandle, max_len);
}
#if defined _ALS_cache_get_field_content
#undef cache_get_field_content
#else
#define _ALS_cache_get_field_content
#endif
#define cache_get_field_content(%0) debug_cache_get_field_content(__line,%0)

У меня нет плагина для работы с MySQL, чтобы проверить код, но я проверил этот метод, перехватив функцию heapspace и всё сработало.

Спасибо, а другой компилятор, нечего не нужно?

vovandolg
28.01.2016, 12:31
undefined symbol "__line" Вручную надо добавлять или всё таки не тем компилятором запахал?

Daniel_Cortez
28.01.2016, 14:36
Спасибо, а другой компилятор, нечего не нужно?


undefined symbol "__line" Вручную надо добавлять или всё таки не тем компилятором запахал?
Читайте внимательнее, уже сказано было (http://pro-pawn.ru/showthread.php?13296&p=68442&viewfull=1#post68442), что стандартный компилятор не подойдёт и нужна доработанная версия от Zeex. Кроме того, ziggi дал ссылку на компилятор, всё в этой теме.

StevenH
28.01.2016, 15:46
Читайте внимательнее, уже сказано было (http://pro-pawn.ru/showthread.php?13296&p=68442&viewfull=1#post68442), что стандартный компилятор не подойдёт и нужна доработанная версия от Zeex. Кроме того, ziggi дал ссылку на компилятор, всё в этой теме.

Всё сделал, скомпилировал мод (в окне выдало другую надпись, мол версию), залил на хостинг и так далее, в mysql_log появилась ошибка:
cache_get_field_content - No cached ....
А в server_log нечего