Debugging|Breaking Scripts


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:

         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.

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!")

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.

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:




	if player.Name == "exp_lol123" then
		print("This player is stupid!")

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!")


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):

Expected Output

   local obj = workspace.Part 
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’s wrong?

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

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.

Another scenario:

  local part = workspace.Parss



I’ll leave you to figure out.

What was wrong

Yes, that’s correct, I misspelt Part

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.")
print("Sweet, data was not lost!")

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



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")

Anything after that will not function anymore since your erroring a script, furthermore, here’s what would happen if you tried.

Image 1

Image 2

Image 3(Output)

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 error().


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


	if player.Name == "exp_lol123" then
		error("He copied your topic, you hadn't even released it yet.")

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.

Did you find this topic useful?
  • 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

0 voters

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!