В этой теме я научу читать и понимать ошибки, возникающие в коде от криворукости из-за невнимательности.
1. Разбор структуры ошибок. Структура у всех ошибок одинаковая и состоит из названия файла, строки, описания ошибки и трассировки ошибки.
Рассмотрим на примере
2. Описания ошибок. Чтобы понять как решить задачу, нам надо понять что произошло. В этом нам всегда помогает описание ошибки. Ниже я привожу типичные описания ошибок, наиболее часто встречающихся при разработке. (Список не полный и я буду рад вашим дополнениям)
Бывают случаи, когда не понятно почему не запускается сам мод. Такое случается когда в коде происходит фатальная ошибка и мод вообще не загружается. Это можно определить по такой строке:
Код:
В этом случае необходимо проверить последние изменения в коде и отменить их при необходимости. Скорее всего дело в пропущенных скобках, нарушающих синтаксис.
Если же сам мод работает, а не запускается определённые аддоны, то это может быть следствием:
1. Разбор структуры ошибок. Структура у всех ошибок одинаковая и состоит из названия файла, строки, описания ошибки и трассировки ошибки.
Рассмотрим на примере
1. SetModel - [C]:-1
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
Название файла - где произошла ошибка:
addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua
Строка ошибки: 119
Описание ошибки: Tried to use a NULL entity!
Трассировка - показывает какие функции и в каких файлах предшествуют нашей ошибке:
1. SetModel - [C]:-1
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
Название файла - где произошла ошибка:
addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua
Строка ошибки: 119
Описание ошибки: Tried to use a NULL entity!
Трассировка - показывает какие функции и в каких файлах предшествуют нашей ошибке:
1. SetModel - [C]:-1
2. SpawnEntity - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:119
3. LeftClick - addons/ttt weapon placer/lua/weapons/gmod_tool/stools/tttweaponplacer.lua:142
4. unknown - gamemodes/sandbox/entities/weapons/gmod_tool/shared.lua:251
2. Описания ошибок. Чтобы понять как решить задачу, нам надо понять что произошло. В этом нам всегда помогает описание ошибки. Ниже я привожу типичные описания ошибок, наиболее часто встречающихся при разработке. (Список не полный и я буду рад вашим дополнениям)
- Tried to use a NULL entity! - означает, что пытаешься использовать несуществующую энтити. Проверь что у тебя в переменной.
- Tried to use a NULL physics object! - вызванная энтити пытается быть физичной, но у неё нет модели.
- attempt to index global 'MutantSpawns' (a nil value) - попытка использовать в коде неинициализированную переменную. Проще говоря, переменная пуста, а к ней происходит обращение.
- bad argument #1 to 'FindByClass' (string expected, got userdata) - неверный аргумент №1. Там должна быть строка, а получена userdata.
- bad argument #1 to 'pairs' (table expected, got nil) - тоже неверный аргумент, должна быть таблица, а получено нулевое значение.
- bad argument #1 to 'JSONToTable' (string expected, got no value) - ещё одна похожая херня, должна быть строка, а получено нулевое значение.
- attempt to compare nil with number - сравнение числа и нулевой переменной.
- table index is nil - попытка обращения к нулевому элементу.
- Couldn't include file 'shared.lua' (File not found) - не найден файл shared.lua
- Calling net.Start with unpooled message name! [Garry's Mod Wiki] - попытка вызвать функцию net.Start с неизвестным идентификатором. Решается строкой util.AddNetworkString("ваш идентификатор")
Бывают случаи, когда не понятно почему не запускается сам мод. Такое случается когда в коде происходит фатальная ошибка и мод вообще не загружается. Это можно определить по такой строке:
Код:
Код:
Couldn't Load Init Script: 'darkrp/gamemode/init.lua'
В этом случае необходимо проверить последние изменения в коде и отменить их при необходимости. Скорее всего дело в пропущенных скобках, нарушающих синтаксис.
Если же сам мод работает, а не запускается определённые аддоны, то это может быть следствием:
- перекрытия кода (переопределение переменных, функций и пр. в этом или другом файле)
- файл со скриптом не был подключен
- нефатальное нарушение синтаксиса