Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±

    Краш сервера по не понятным причинам

    1. enum _:e_FastingType
    2. {
    3. FASTING_NATIONAL_GUARD,
    4. FASTING_ARMY_ZONE_51
    5. }
    6.  
    7. const
    8. MAX_FASTING_TYPE = e_FastingType,
    9. Float:MAX_FASTING_3DTEXT_DD = 10.0,
    10. MAX_FASTING_NAME_LENGTH = 30,
    11. MAX_FASTING_PLAYER_IN_IDX = 10;
    12.  
    13. #define FASTING_PICKUP_MODELID 1239
    14. #define FASTING_VIRTUAL_WORLD 0
    15. #define FASTING_cINFO "{0DAA07}"
    16.  
    17. enum e_FastingParams
    18. {
    19. fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
    20. Float:fg_areaSize,
    21. Float:fg_posX,
    22. Float:fg_posY,
    23. Float:fg_posZ,
    24. fg_areaId,
    25. Text3D:fg_text3D,
    26. fg_players[MAX_FASTING_PLAYER_IN_IDX]
    27. }
    28.  
    29. new
    30. Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
    31. {
    32. {
    33. {"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
    34. {"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
    35. },
    36. {
    37. {"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
    38. {""}
    39. }
    40. };


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


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

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


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

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

    1. new Fasting[MAX_FASTING_TYPE][2][e_FastingParams]


    То всё нормально..
    Последний раз редактировалось execution; 20.04.2020 в 13:12.

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Попробовал запустить у себя такой код:
    1. #include <a_samp>
    2.  
    3. const MAX_PLAYER_BAN_REASON_LENGTH = 24;
    4.  
    5. enum _:e_FastingType
    6. {
    7. FASTING_NATIONAL_GUARD,
    8. FASTING_ARMY_ZONE_51
    9. };
    10.  
    11. const
    12. MAX_FASTING_TYPE = e_FastingType,
    13. Float:MAX_FASTING_3DTEXT_DD = 10.0,
    14. MAX_FASTING_NAME_LENGTH = 30,
    15. MAX_FASTING_PLAYER_IN_IDX = 10;
    16.  
    17. #define FASTING_PICKUP_MODELID 1239
    18. #define FASTING_VIRTUAL_WORLD 0
    19. #define FASTING_cINFO "{0DAA07}"
    20.  
    21. enum e_FastingParams
    22. {
    23. fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
    24. Float:fg_areaSize,
    25. Float:fg_posX,
    26. Float:fg_posY,
    27. Float:fg_posZ,
    28. fg_areaId,
    29. Text3D:fg_text3D,
    30. fg_players[MAX_FASTING_PLAYER_IN_IDX]
    31. };
    32.  
    33. new
    34. Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
    35. {
    36. {
    37. {"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
    38. {"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
    39. },
    40. {
    41. {"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
    42. {""}
    43. }
    44. };
    45.  
    46. main()
    47. {
    48. printf("Fasting[0][0][fg_name]: %s", Fasting[0][0][fg_name]);
    49. }

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

  3. #3
    Аватар для tnc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Попробовал запустить у себя такой код:
    1. #include <a_samp>
    2.  
    3. const MAX_PLAYER_BAN_REASON_LENGTH = 24;
    4.  
    5. enum _:e_FastingType
    6. {
    7. FASTING_NATIONAL_GUARD,
    8. FASTING_ARMY_ZONE_51
    9. };
    10.  
    11. const
    12. MAX_FASTING_TYPE = e_FastingType,
    13. Float:MAX_FASTING_3DTEXT_DD = 10.0,
    14. MAX_FASTING_NAME_LENGTH = 30,
    15. MAX_FASTING_PLAYER_IN_IDX = 10;
    16.  
    17. #define FASTING_PICKUP_MODELID 1239
    18. #define FASTING_VIRTUAL_WORLD 0
    19. #define FASTING_cINFO "{0DAA07}"
    20.  
    21. enum e_FastingParams
    22. {
    23. fg_name[MAX_PLAYER_BAN_REASON_LENGTH + 1],
    24. Float:fg_areaSize,
    25. Float:fg_posX,
    26. Float:fg_posY,
    27. Float:fg_posZ,
    28. fg_areaId,
    29. Text3D:fg_text3D,
    30. fg_players[MAX_FASTING_PLAYER_IN_IDX]
    31. };
    32.  
    33. new
    34. Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
    35. {
    36. {
    37. {"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
    38. {"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
    39. },
    40. {
    41. {"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
    42. {""}
    43. }
    44. };
    45.  
    46. main()
    47. {
    48. printf("Fasting[0][0][fg_name]: %s", Fasting[0][0][fg_name]);
    49. }

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

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от tnc Посмотреть сообщение
    А тестировали под какой OS?
    (Только сейчас заметил, что в логах названия модулей заканчиваются на "*.so", а стало быть краш был под Linux).
    Да, тестировал под Windows, на данный момент не имею в распоряжении машины с Linux. Конечно, я могу установить VirtualBox и накатить какой-нибудь дистрибутив, но это займёт некоторое время.

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

    Пока что подозреваю, что виноват код инициализации массивов, о багах в нём известно давно (пример: краш из-за неполного объявления данных при инициализации массива). Хотел как-то разобраться с этим, но у меня так и не получилось понять тот спагетти-код, что отвечает за инициализацию.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #5
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение

    Пока что такой вопрос к ТС: в приведённом коде массив "Fasting", видимо, не проинициализирован полностью, а именно, в мере [1][1] приведена только строка, не хватает 4 вещественных чисел после неё, не говоря уже о том, что ни в одной из позиций нет значений для fg_areaId, fg_text3D и fg_players (почему компилятор вообще не выдаёт ошибку на такое?) Если добавить недостающие данные, краш исчезнет?
    1. new
    2. Fasting[MAX_FASTING_TYPE][][e_FastingParams] =
    3. {
    4.  
    5. {
    6. {"Тест1", 12.0, 2725.1313, -2399.6323, 13.6328},
    7. {"Тест2", 12.0, 2704.5034, -2411.7764, 13.6328}
    8. },
    9. {
    10. {"Тест3", 12.0, 2704.5034, -2411.7764, 13.6328},
    11. {"Teст4", 12.0, 2704.5034, -2411.7764, 13.6328}
    12. }
    13. };


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

  6. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от execution Посмотреть сообщение
    Попробовал так и всё равно вызывается краш.
    Под "добавить недостающие данные" я имел в виду указать значения для всех полей из e_FastingParams, у вас указана только часть из них.
    По идее компилятор должен выдавать на такое ошибку, т.к. для последней меры массива указан фиксированный размер (т.е. e_FastingParams ячеек), почему он этого не делает - отдельный вопрос.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •