PDA

Просмотр полной версии : [Вопрос] Краш сервера по не понятным причинам



execution
20.04.2020, 11:59
enum _:e_FastingType
{
FASTING_NATIONAL_GUARD,
FASTING_ARMY_ZONE_51
}

const
MAX_FASTING_TYPE = e_FastingType,
Float:MAX_FASTING_3DTEXT_DD = 10.0,
MAX_FASTING_NAME_LENGTH = 30,
MAX_FASTING_PLAYER_IN_IDX = 10;

#define FASTING_PICKUP_MODELID 1239
#define FASTING_VIRTUAL_WORLD 0
#define FASTING_cINFO "{0DAA07}"

enum e_FastingParams
{
fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
Float:fg_areaSize,
Float:fg_posX,
Float:fg_posY,
Float:fg_posZ,
fg_areaId,
Text3D:fg_text3D,
fg_players[MAX_FASTING_PLAYER_IN_IDX]
}

new
Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
{
{
{"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
{"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
},
{
{"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
{""}
}
};

crashlog:

[10:52:56] Server crashed due to an unknown error
[10:52:56] Native backtrace:
[10:52:56] #0 f73378b6 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () in plugins/crashdetect.so
[10:52:56] #1 f732f120 in _ZN18CrashDetectHandler20PrintNativeBacktraceERSoRKN2os7ContextE () in plugins/crashdetect.so
[10:52:56] #2 f732f886 in _ZN18CrashDetectHandler20PrintNativeBacktraceERKN2os7ContextE () in plugins/crashdetect.so
[10:52:56] #3 f732ff96 in _ZN18CrashDetectHandler7OnCrashERKN2os7ContextE () in plugins/crashdetect.so
[10:52:56] #4 f7336f82 in ?? () in plugins/crashdetect.so
[10:52:56] #5 f7735b20 in __kernel_rt_sigreturn () in linux-gate.so.1
[10:52:56] #6 f7735af9 in __kernel_vsyscall () in linux-gate.so.1
[10:52:56] #7 f738add0 in gsignal () in /lib/i386-linux-gnu/libc.so.6
[10:52:56] #8 f738c297 in abort () in /lib/i386-linux-gnu/libc.so.6
[10:52:56] #9 f7383a27 in ?? () in /lib/i386-linux-gnu/libc.so.6
[10:52:56] #10 f7383aab in ?? () in /lib/i386-linux-gnu/libc.so.6
[10:52:56] #11 08098558 in ?? () in ./samp03svr
[10:52:56] #12 080d61b1 in ?? () in ./samp03svr
[10:52:56] #13 080a4f0b in ?? () in ./samp03svr
[10:52:56] #14 080ab922 in ?? () in ./samp03svr
[10:52:56] #15 080aa0fd in ?? () in ./samp03svr
[10:52:56] #16 f7377286 in __libc_start_main () in /lib/i386-linux-gnu/libc.so.6
[10:52:56] Registers:
[10:52:56] EAX: 00000000 EBX: 00000002 ECX: ffbc9980 EDX: 00000000
[10:52:56] ESI: 00000008 EDI: 00000000 EBP: ffbc9980 ESP: ffbc9970
[10:52:56] EIP: f7735af9 EFLAGS: 00000206
[10:52:56] Stack:
[10:52:56] ESP+00000000: ffbc9980 00000000 ffbc9980 f738add0
[10:52:56] ESP+00000020: 081d4376 0d696910 ffbc9a18 080a10af
[10:52:56] ESP+00000040: 3de00ec7 f773fbc9 00000005 00000001
[10:52:56] ESP+00000060: ffbc9a24 ffbc9a20 00000008 00000000
[10:52:56] ESP+00000080: f736c668 f7362f12 01ef0076 f7513000
[10:52:56] ESP+000000a0: ffffffff ffffffff ffffffff ffffffff
[10:52:56] ESP+000000c0: ffffffff ffffffff ffffffff ffffffff
[10:52:56] ESP+000000e0: ffffffff ffffffff ffffffff ffffffff
[10:52:56] ESP+00000100: ffffffff ffffffff ffffffff ffffffff
[10:52:56] ESP+00000120: f7730000 ffbc9b44 ffbc9e78 f738c297
[10:52:56] ESP+00000140: 0000003c 0000003d 0000003c 00000001
[10:52:56] ESP+00000160: 00000000 00000000 00000000 00000000
[10:52:56] ESP+00000180: 00000000 00000000 00000000 00000000
[10:52:56] ESP+000001a0: 00000000 00000000 00000000 00000000
[10:52:56] ESP+000001c0: 00000000 00000000 00000000 00000000
[10:52:56] ESP+000001e0: 00000000 00000004 f7514138 f7384830
[10:52:56] ESP+00000200: f7759f3c ffbc9b00 f73a128b f7513000
[10:52:56] ESP+00000220: f7513cc0 00000001 ffbc9bc8 00000000
[10:52:56] ESP+00000240: f7513cc0 f7513cc0 f73cd6fb f7513000
[10:52:56] ESP+00000260: f738c147 f7513000 f7513cc0 f7383a27
[10:52:56] ESP+00000280: f7513000 f305ed98 00000009 f7383aab
[10:52:56] ESP+000002a0: 0815812d f74c0110 00000005 f7383a70
[10:52:56] ESP+000002c0: 081585f8 0815842d 00000323 0815812d
[10:52:56] ESP+000002e0: 00000024 00000024 00000810 00000000
[10:52:56] ESP+00000300: 00000898 00000263 00000894 0000000b
[10:52:56] ESP+00000320: 00000888 fffffffc 00000884 00000004
[10:52:56] ESP+00000340: 00000878 00000089 00000874 fffffffc
[10:52:56] ESP+00000360: 00000868 0000002c 00000864 0000000f
[10:52:56] ESP+00000380: 00000858 00000027 00000854 0000000c
[10:52:56] ESP+000003a0: 00000848 0000002c 00000844 00000089
[10:52:56] ESP+000003c0: 00000838 00000051 00000834 0000002b
[10:52:56] ESP+000003e0: 00000828 0000000b 00000824 00000024
[10:52:56] Loaded modules:
[10:52:56] 00000000 - 00187f43 samp03svr
[10:52:56] f7735000 - f7735c5a linux-gate.so.1
[10:52:56] f7721000 - f77239c4 /lib/i386-linux-gnu/libdl.so.2
[10:52:56] f7704000 - f771f75b /lib/i386-linux-gnu/libpthread.so.0
[10:52:56] f758a000 - f770dbbf /usr/lib/i386-linux-gnu/libstdc++.so.6
[10:52:56] f7535000 - f7589120 /lib/i386-linux-gnu/libm.so.6
[10:52:56] f7517000 - f7533354 /lib/i386-linux-gnu/libgcc_s.so.1
[10:52:56] f735f000 - f751d73b /lib/i386-linux-gnu/libc.so.6
[10:52:56] f7736000 - f775a06c /lib/ld-linux.so.2
[10:52:56] f7318000 - f735c3ac plugins/crashdetect.so
[10:52:56] f7233000 - f731b3e9 plugins/pawncmd.so
[10:52:56] f70eb000 - f7237440 plugins/pawnraknet.so
[10:52:56] f7025000 - f70ea740 plugins/streamer.so
[10:52:56] f701c000 - f702347c /lib/i386-linux-gnu/librt.so.1
[10:52:56] f700f000 - f701b5fc plugins/sscanf.so
[10:52:56] f6c6b000 - f7013ac7 plugins/mysql_static.so
[10:52:56] f6258000 - f62690d0 /lib/i386-linux-gnu/libnss_files.so.2
[10:52:56] f623b000 - f6256daf plugins/rustext.so


Когда обращаюсь к любой константе перечеслителя e_FastingParams - сразу крашит.

Например:
printf("Fasting[0][0][fg_name]: %s", Fasting[0][0][fg_name]);

Что может быть не так?

UPD: указав явно вторую меру - краш не вызывается.
То есть, если мы сделаем так:


new Fasting[MAX_FASTING_TYPE][2][e_FastingParams]


То всё нормально..

Daniel_Cortez
20.04.2020, 18:44
Попробовал запустить у себя такой код:

#include <a_samp>

const MAX_PLAYER_BAN_REASON_LENGTH = 24;

enum _:e_FastingType
{
FASTING_NATIONAL_GUARD,
FASTING_ARMY_ZONE_51
};

const
MAX_FASTING_TYPE = e_FastingType,
Float:MAX_FASTING_3DTEXT_DD = 10.0,
MAX_FASTING_NAME_LENGTH = 30,
MAX_FASTING_PLAYER_IN_IDX = 10;

#define FASTING_PICKUP_MODELID 1239
#define FASTING_VIRTUAL_WORLD 0
#define FASTING_cINFO "{0DAA07}"

enum e_FastingParams
{
fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
Float:fg_areaSize,
Float:fg_posX,
Float:fg_posY,
Float:fg_posZ,
fg_areaId,
Text3D:fg_text3D,
fg_players[MAX_FASTING_PLAYER_IN_IDX]
};

new
Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
{
{
{"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
{"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
},
{
{"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
{""}
}
};

main()
{
printf("Fasting[0][0][fg_name]: %s", Fasting[0][0][fg_name]);
}

Никакого краша нет.
Единственные мои изменения в коде: добавил "#include <a_samp>", объявил MAX_PLAYER_BAN_REASON_LENGTH и завернул код обращения к константе из e_FastingParams в функцию main().

tnc
20.04.2020, 19:08
Попробовал запустить у себя такой код:

#include <a_samp>

const MAX_PLAYER_BAN_REASON_LENGTH = 24;

enum _:e_FastingType
{
FASTING_NATIONAL_GUARD,
FASTING_ARMY_ZONE_51
};

const
MAX_FASTING_TYPE = e_FastingType,
Float:MAX_FASTING_3DTEXT_DD = 10.0,
MAX_FASTING_NAME_LENGTH = 30,
MAX_FASTING_PLAYER_IN_IDX = 10;

#define FASTING_PICKUP_MODELID 1239
#define FASTING_VIRTUAL_WORLD 0
#define FASTING_cINFO "{0DAA07}"

enum e_FastingParams
{
fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
Float:fg_areaSize,
Float:fg_posX,
Float:fg_posY,
Float:fg_posZ,
fg_areaId,
Text3D:fg_text3D,
fg_players[MAX_FASTING_PLAYER_IN_IDX]
};

new
Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
{
{
{"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
{"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
},
{
{"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
{""}
}
};

main()
{
printf("Fasting[0][0][fg_name]: %s", Fasting[0][0][fg_name]);
}

Никакого краша нет.
Единственные мои изменения в коде: добавил "#include <a_samp>", объявил MAX_PLAYER_BAN_REASON_LENGTH и завернул код обращения к константе из e_FastingParams в функцию main().

А тестировали под какой OS?

Daniel_Cortez
20.04.2020, 19:25
А тестировали под какой OS?
(Только сейчас заметил, что в логах названия модулей заканчиваются на "*.so", а стало быть краш был под Linux).
Да, тестировал под Windows, на данный момент не имею в распоряжении машины с Linux. Конечно, я могу установить VirtualBox и накатить какой-нибудь дистрибутив, но это займёт некоторое время.

Пока что такой вопрос к ТС: в приведённом коде массив "Fasting", видимо, не проинициализирован полностью, а именно, в мере [1][1] приведена только строка, не хватает 4 вещественных чисел после неё, не говоря уже о том, что ни в одной из позиций нет значений для fg_areaId, fg_text3D и fg_players (почему компилятор вообще не выдаёт ошибку на такое?) Если добавить недостающие данные, краш исчезнет?

Пока что подозреваю, что виноват код инициализации массивов, о багах в нём известно давно (пример: краш из-за неполного объявления данных при инициализации массива (https://github.com/pawn-lang/compiler/issues/439)). Хотел как-то разобраться с этим, но у меня так и не получилось понять тот спагетти-код, что отвечает за инициализацию.

execution
25.04.2020, 11:11
Пока что такой вопрос к ТС: в приведённом коде массив "Fasting", видимо, не проинициализирован полностью, а именно, в мере [1][1] приведена только строка, не хватает 4 вещественных чисел после неё, не говоря уже о том, что ни в одной из позиций нет значений для fg_areaId, fg_text3D и fg_players (почему компилятор вообще не выдаёт ошибку на такое?) Если добавить недостающие данные, краш исчезнет?



new
Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
{

{
{"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
{"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
},
{
{"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
{"Teст4", 12.0, 2704.5034, -2411.7764, 13.6328}
}
};

Попробовал так и всё равно вызывается краш.

Daniel_Cortez
25.04.2020, 15:03
Попробовал так и всё равно вызывается краш.
Под "добавить недостающие данные" я имел в виду указать значения для всех полей из e_FastingParams, у вас указана только часть из них.
По идее компилятор должен выдавать на такое ошибку, т.к. для последней меры массива указан фиксированный размер (т.е. e_FastingParams ячеек), почему он этого не делает - отдельный вопрос.