MonoDevelop's Debugger

확인 완료한 버전: 4.5


난이도: 초급

Debug.Log (or print) can be a great tool for outputting messages to the console when things happen. But what if you want to check the state of a bunch of variables at a certain point in your application?

One way of doing that would be to write a huge Debug.Log message like this:

Code snippet

using UnityEngine;
public class TestScript : MonoBehaviour {
    public float fSpeed, fHeight, fLength;
    public int iNumberOfBullets;
    public string sName;

    void Update(){
        fSpeed += Time.deltaTime;
        Debug.Log(string.Format("Speed: {0}, Height:{1}, Length:{2}, Number of Bullets: {3}, Name: {4}",fSpeed,fHeight,fLength,iNumberOfBullets,sName));

Which will result in your console window looking something like this..

Alt Debugging 01

Not to mention the spikes your frame-rate will suffer because it will write to disk each frame…

Alt Debugging 02

This example is very basic, but I’m sure if you have been programming with Unity for long enough you will have used Debug.Log to output something at some point. I’d recommend using it for most situations, however there are some instances when a Debug.Log just wouldn’t cut it.

Enter… MonoDevelop Debugger

There are some out there who would cry out in pain just simple muttering of those words pre-Unity 4, in previous versions it used to crash Unity, crash MonoDevelop and in some isolated instances blow everything up. However, I’ve been using it for the past year to debug everything I’ve worked on and have found it incredibly useful (okay, it did crash a couple of times, but it saved me far more time than it took to reload everything).

If that hasn’t scared you off of using MonoDevelop’s Debugger, carry on reading!

So… How can I use it?

To start using the Debugger, all you have to do is press the “Play” button in the top left of MonoDevelop’s window:

Alt Debugging 03

If you press that, MonoDevelop will prompt you to “Attach to a Process”. Just select your instance of unity and press attach. The dialogue will vanish and you will be left with a “Stop” button instead of a play button.

To start debugging, press your mouse to the far left edge of the editor (next to the line number) and a red dot will appear, you would have just created a breakpoint!

Alt Debugging 04

This will not do anything for now, however, if you now go to Unity and press play in your editor window something great will happen…

Alt Debugging 05

At the very bottom of the window, if you have the locals window open (if not, Go to View > Debug Windows > Locals), you will see all of the variables that currently exist in the local instance and their values at the time of the breakpoint being hit.

To continue the applications execution, just press the “Play” button in MonoDevelop.

Alt Debugging 06

Your script will continue its execution (and Unity’s editor will no longer be frozen). Of course in this instance, the script will hit the breakpoint again on the next frame. So just left click the breakpoint in MonoDevelop and hit the Play button again so it doesn’t execute the breakpoint again.

It gets better!

With breakpoints, you can make them stop the application running when certain conditions are met. For example, imagine you want to check what the values are when the fSpeed variable reaches 10. To do that, press the Stop button in MonoDevelop, and Right click on your breakpoint, then press Breakpoint Properties.

Alt Debugging 07

Set the condition to “Break when condition is true” and set the “Condition Expression” to “fSpeed >= 10” and then press OK.

Re-attach the editor to Unity and press the Play button in Unity, when the condition is met the breakpoint will fire and stop the application.

A note about using Condition Breakpoints: They cause performance issues as it has to validate the expression each time it is run.

Thanks to Steven Yau (@yaustar) for his Tweet explaining this.

That’s the basics

In these examples, it may not seem very useful to be using the debugger, however imagine if you are writing your own AI code or perhaps trying to track down a strange memory leak bug. In many instances I have relied on these tools to find and fix them! Try experimenting, let and if it helps you in any way try and help others! If you find anything particularly useful that breakpoints can do please let me know (tweet me! @DGoodayle), I’m always looking to expand my toolset! Also, Tracepoints are very useful! Richard Fine (@Superpig) has made a quick screencast explaining them:

Trace Points

Hope it helps you!

Just a Pixel

커뮤니티 집필자

Just a Pixel is a creative digital studio specialising in in games and mobile application development, augmented and virtual reality installation pieces and tailored event pieces. Based in the heart of Brighton, Just a Pixel was founded in September 2013 by Danny Goodayle and Roberta Saliani. The studio has been using Unity as the main engine of choice since 2008. We are proud to have worked with clients such as Activision, CBBC and Sony Pictures Television. Just a Pixel is also focused in the creation of own IP and Light: Sneak, Hack, Steal was one of the first titles published by Team 17 after 20 years.

관련 문서


  1. Scripts as Behaviour Components
  2. Variables and Functions
  3. Conventions and Syntax
  4. IF Statements
  5. Loops
  6. Scope and Access Modifiers
  7. Awake and Start
  8. Update and FixedUpdate
  9. Vector Maths
  10. Enabling and Disabling Components
  11. Activating GameObjects
  12. Translate and Rotate
  13. Look At
  14. Linear Interpolation
  15. Destroy
  16. GetButton and GetKey
  17. GetAxis
  18. OnMouseDown
  19. GetComponent
  20. Delta Time
  21. Data Types
  22. Classes
  23. Instantiate
  24. Arrays
  25. Invoke
  26. Enumerations
  27. Switch Statements
  1. Properties
  2. Ternary Operator
  3. Statics
  4. Method Overloading
  5. Generics
  6. Inheritance
  7. Polymorphism
  8. Member Hiding
  9. Overriding
  10. Interfaces
  11. Extension Methods
  12. Namespaces
  13. Lists and Dictionaries
  14. Coroutines
  15. Quaternions
  16. Delegates
  17. Attributes
  18. Events
  1. Introduction to ECS
  2. Introduction to the Entity Component System and C# Job System
  3. ECS Overview
  4. Implementing Job System
  5. Implementing ECS
  6. Using the Burst Compiler
  1. Building a Custom Inspector
  2. The DrawDefaultInspector Function
  3. Adding Buttons to a Custom Inspector
  4. Unity Editor Extensions – Menu Items
  5. An Introduction to Editor Scripting
  6. Creating a Spline Tool
  7. Getting Started with IK
  1. Simple Clock
  2. MonoDevelop's Debugger
  3. Unity Editor Extensions – Menu Items
  4. Creating Meshes
  1. Mastering Unity Project Folder Structure - Version Control Systems
  1. Installation and Setup of Visual Studio
  2. Editing Your Game Code with Visual Studio
  3. Debugging Unity games in Visual Studio
  1. Scripting Primer and Q&A
  2. Scripting Primer and Q&A - Continued
  3. Scripting Primer and Q&A - Continued (Again)
  4. Persistence - Saving and Loading Data
  5. Object Pooling
  6. Introduction to Scriptable Objects
  7. How to communicate between Scripts and GameObjects
  8. Coding in Unity for the Absolute Beginner
  9. Sound Effects & Scripting
  10. Editor Scripting Intro
  11. Writing Plugins
  12. Property Drawers & Custom Inspectors
  13. Events: Creating a simple messaging system
  14. Ability System with Scriptable Objects
  15. Character Select System with Scriptable Objects
  16. Creating Basic Editor Tools
  1. Intro and Setup
  2. Data Classes
  3. Menu Screen
  4. Game UI
  5. Answer Button
  6. Displaying Questions
  7. Click To Answer
  8. Ending The Game and Q&A
  1. Intro To Part Two
  2. High Score with PlayerPrefs
  3. Serialization and Game Data
  4. Loading Game Data via JSON
  5. Loading and Saving via Editor Script
  6. Game Data Editor GUI
  7. Question and Answer
  1. Overview and Goals
  2. Localization Data
  3. Dictionary, JSON and Streaming Assets
  4. Localization Manager
  5. Startup Manager
  6. Localized Text Component
  7. Localized Text Editor Script
  8. Localization Q&A
  1. Introduction and Session Goals
  2. Particle Launcher
  3. Particle Collisions
  4. ParticleLauncher Script
  5. Particle Collisions and Scripting
  6. Random Particle Colors
  7. Drawing Decals with Particles
  8. Collecting Particle Information For Display
  9. Displaying Particles Via Script
  10. Droplet Decals
  11. Questions and Answers
  1. Introduction and Goals
  2. Project Architecture Overview
  3. Creating Rooms
  4. Creating Exits
  5. Text Input
  6. Reacting To String Input
  7. Input Actions And The Delegate Pattern
  8. Questions and Answers
  1. Introduction and Goals
  2. Project Architecture and Review
  3. Displaying Item Descriptions
  4. Examining Items
  5. Taking Items
  6. Displaying Inventory
  7. Action Responses
  8. Preparing The Use Item Dictionary
  9. Creating The Use Action
  10. Questions and Answers