We all know debugging is painful and especially when there’s no error to give information out. Don’t you fear because exp_lol123 is going to show you how to debug and even break an entire script!
Print, just like warn() too is very useful for debugging. Let’s say your script has stopped working and you don’t know what the problem is. Simply, add a print command on certain lines such as events. Here’s an example:
script.Parent.Touched:Connect(function(hit) print("Starting up") -- this detects if the script has started up. if hit.Name == "Cubes" then --I spelt Cube wrong print("Oh my goodness!") -- tests if cubes(the incorrect part name) has hit it. end end)
Huh, the script problem is after the print statement. Oh I know why it’s not firing! I spelt Cube wrong!
There’s obviously other problems that can occur while scripting.
Print, in simplest terms basically is an essential to finding root problems and their location since sometimes, the script may not error so the location is not given. Here’s another example:
for i,v in pairs(workspace:GetChildren()) do print("Looking through workspace") if v:IsA("Union") then print("It's a union! Yes, \"Union\" is a union!") end end
This didn’t work because Union is supposed to be a UnionOperation, not Union. This will display no errors as far as I’m aware.
This will, again be able to find the location of the problem.
We’ve found out how to find location of errors but how about, if there’s an error. Errors are normally spoken in English so it’s pretty easy to understand. Also, if there’s an underline, please hover over it so you are prepared for the error. This section will cover a few of the errors, there’s a lot more errors(and I mean hundreds more) to cover. This will just help you get the hang of it.
Let’s start with the most common, yeah we’re talking about the infamous end error.
What the end error is
The end error, in my terms is basically when the script is missing an end. When this does happen, the script will break. This can also happen when the script has too much ends.
Here’s the error:
game.Players.PlayerAdded:Connect(function(player) if player.Name == "exp_lol123" then print("This player is stupid!") end
Now each statement or event requires an end or end). Events require end) and statements require end. Now count the amount of statements and events:
Now count the amount of end/end):
Count the amounts of events and end)
1 Event and no end)
Attempt to index as nil error
Let’s now talk about the nil error. The nil error in my terms is simply when something has been identified as nil when it’s not supposed to be nil. The error states that it attempts to index a value/object or anything as nil.
Well, IsA is nil. I wonder why? local function wow(obj) if obj:IsA("Part") then print("Object is a part!") end end wow()
Now, I’ll leave you to figure out.
What was wrong
This is a mistake I, when you forget to pass an argument. Object is nil so IsA can’t be a member of nil so it’s basically nil.
Here’s another demonstration:
Normally this will appear if you mistype a variable:
This is basically like recommendations. Also a blue underline will appear.
When you hover your mouse over it, it’ll come up with this:
Always check and hover over if there’s a underline.
Now, I added a
.Name to my code.
Here’s your expected output and your code(totally not trying to replicate what the developer hub do):
local obj = workspace.Part print(objs.Name)
Invalid Member Error
Now, last but not least, invalid member error!
Valid member error is basically when something is not a valid member of something. Here’s a scenario I made up:
It’ll put a blue underline.
After looking at the error, you’ll immediately know what’s wrong. I’ll leave you to figure out.
What was wrong
What was wrong was the fact the script was put in the wrong place, it was meant to be put in a part but I put it in ServerScriptService
Here’s another scenario:
local part = workspace.Part print(part.Name)
Huh, why is this script incorrect?
I’ll again leave it to you to figure out, this one is a little tricky though.
This is an error that doesn’t occur all the time but occurs occasionally. This error happens when
Part is called before
Part has even loaded and hence, it’ll cause this error.
local part = workspace.Parss print(part.Name)
I’ll leave you to figure out.
What was wrong
Yes, that’s correct, I misspelt
Let’s now continue on onto
warn(). We’ve finished with errors.
Warn() is used to notify that something isn’t working right. It’s yellow text like this:
Let’s say you have an if statement like this:
if data == nil then warn("Data was lost unfortunately.") else print("Sweet, data was not lost!") end
The warn part will notify something is wrong to the developer. This helps a ton since it gives you instructions on what to fix. Now, I’ve done the print thing already so this section was pretty short. Moving on
BREAKING A WHOLE SCRIPT
This is used to break an entire script. Let’s say a tool hasn’t loaded, something like this:
local handle = script.Parent.Handle if handle == nil then error("Tool hasn't loaded in") end
Anything after that will not function anymore since your erroring a script, furthermore, here’s what would happen if you tried.
Why didn’t it print
warn(), you’ll probably know why immediately by Image2.
What was wrong
By these images, you could see the script was trying to warn you the warn thing wouldn’t work and it’d not function. You could see the error but you can’t see the warn thing. Errors are able to break scripts and your able to add a string value in them.
Error is useful if you want to break a script. Let’s maybe now do an account termination immunity from that game script with the use of
You can see the blue underline.
10:23:30.850 ServerScriptService.Script:3: He copied your topic, you hadn't even released it yet. - Server - Script:3
game.Players.PlayerAdded:Connect(function(player) if player.Name == "exp_lol123" then error("He copied your topic, you hadn't even released it yet.") player:Kick("WHYY") end end)
I wonder why he didn’t get banned.
He didn’t get banned because we errored and broke the script.
Also, use the The Debugger - Enhanced Watch Window if you want to debug like a proper master.
- Yes, I learnt a lot
- I already knew this stuff but I think it’d be useful for others
- No, I did not find this useful and I learnt nothing from this.
- A little bit, not 100% useful
Exiting the topic
Right, were finished with this topic! Now, yes I did use a lot of the hide details thing. I used it because the topic would be REALLY long without it. It also organized my topic. And yes, I did aim for a similar layout to the developer hub too so that’s why. Right, I hope this taught you how to debug and break a script! Again(just like in all of my community tutorials) if there is anything wrong, please state it in the replies. And as always, debug out!