# Debug Viewer > **Real-time debugging and visualization for your ECS projects** The GECS Debug Viewer provides live inspection of entities, components, systems, and relationships while your game is running. Perfect for understanding entity behavior, optimizing system performance, and debugging complex interactions. ## 📋 Prerequisites - GECS plugin enabled in your project - Debug mode enabled: `Project > Project Settings > GECS > Debug Mode` - Game running from the editor (F5 or F6) ## 🎯 Quick Start ### Opening the Debug Viewer 1. **Run your game** from the Godot editor (F5 for current scene, F6 for main scene) 2. **Open the debugger panel** (bottom of editor, usually appears automatically) 3. **Click the "GECS" tab** next to "Debugger", "Errors", and "Profiler" > 💡 **Debug Mode Required**: If you see an overlay saying "Debug mode is disabled", go to `Project > Project Settings > GECS` and enable "Debug Mode" ## 🔍 Features Overview The debug viewer is split into two main panels: ### Systems Panel (Right) Monitor system execution and performance in real-time. **Features:** - **System execution time** - See how long each system takes to process (milliseconds) - **Entity count** - Number of entities processed per system - **Active/Inactive status** - Toggle systems on/off at runtime - **Sortable columns** - Click column headers to sort by name, time, or status - **Performance metrics** - Archetype count, parallel processing info **Status Bar:** - Total system count - Combined execution time - Most expensive system highlighted ### Entities Panel (Left) Inspect individual entities and their components. **Features:** - **Entity hierarchy** - See all entities in your world - **Component data** - View component properties in real-time (WIP) - **Relationships** - Visualize entity connections and associations - **Search/filter** - Find entities or components by name ## 🎮 Using the Debug Viewer ### Monitoring System Performance **Sort by execution time:** 1. Click the **"Time (ms)"** column header in the Systems panel 2. Systems are now sorted by performance (slowest first by default) 3. Click again to reverse the sort order **Identify bottlenecks:** - Look for systems with high execution times (> 5ms) - Check the entity count - more entities = more processing - Consider optimization strategies from [Performance Optimization](PERFORMANCE_OPTIMIZATION.md) **Example:** ``` Name Time (ms) Status PhysicsSystem 8.234 ms ACTIVE ← Bottleneck! RenderSystem 2.156 ms ACTIVE AISystem 0.892 ms ACTIVE ``` ### Toggling Systems On/Off **Disable a system at runtime:** 1. Locate the system in the Systems panel 2. Click on the **Status** column (shows "ACTIVE" or "INACTIVE") 3. System immediately stops processing entities 4. Click again to re-enable **Use cases:** - Test game behavior without specific systems - Isolate bugs by disabling systems one at a time - Temporarily disable expensive systems during debugging - Verify system dependencies > ⚠️ **Important**: System state resets when you restart the game. This is a debugging tool, not a save/load feature. ### Inspecting Entities **View entity components:** 1. Expand an entity in the Entities panel 2. See all attached components (e.g., `C_Health`, `C_Transform`) 3. Expand a component to view its properties 4. Values update in real-time as your game runs **Example entity structure:** ``` Entity #123 : /root/World/Player ├── C_Health │ ├── current: 87.5 │ └── maximum: 100.0 ├── C_Transform │ └── position: (15.2, 0.0, 23.8) └── C_Velocity └── velocity: (2.5, 0.0, 1.3) ``` ### Viewing Relationships Relationships show how entities are connected to each other. **Relationship types displayed:** - **Entity → Entity**: `Relationship: C_ChildOf -> Entity /root/World/Parent` - **Entity → Component**: `Relationship: C_Damaged -> C_FireDamage` - **Entity → Archetype**: `Relationship: C_Buff -> Archetype Player` - **Entity → Wildcard**: `Relationship: C_Damage -> Wildcard` **Expand relationships to see:** - Relation component properties - Target component properties (for component relationships) - Full relationship metadata > 💡 **Learn More**: See [Relationships](RELATIONSHIPS.md) for details on creating and querying entity relationships ### Using Search and Filters **Systems panel:** - Type in the "Filter Systems" box to find systems by name - Only matching systems remain visible **Entities panel:** - Type in the "Filter Entities" box to search - Searches entity names, component names, and property names - Useful for finding specific entities in large worlds ### Multi-Monitor Setup **Pop-out window:** 1. Click **"Pop Out"** button at the top of the debug viewer 2. Debug viewer moves to a separate window 3. Position on second monitor for permanent visibility 4. Click **"Pop In"** to return to the editor tab **Benefits:** - Keep debug info visible while editing scenes - Monitor performance during gameplay - Track entity changes without switching panels ### Collapse/Expand Controls **Quick controls:** - **Collapse All** / **Expand All** - Manage all entities at once - **Systems Collapse All** / **Systems Expand All** - Manage all systems at once - Individual items can be collapsed/expanded by clicking ## 🔧 Common Workflows ### Performance Optimization Workflow 1. **Sort systems by execution time** (click "Time (ms)" header) 2. **Identify slowest system** (top of sorted list) 3. **Expand system details** to see entity count and archetype count 4. **Review system implementation** for optimization opportunities 5. **Apply optimizations** from [Performance Optimization](PERFORMANCE_OPTIMIZATION.md) 6. **Re-run and compare** execution times ### Debugging Workflow 1. **Identify the problematic entity** using search/filter 2. **Expand entity** to view all components 3. **Watch component values** update in real-time 4. **Toggle related systems off/on** to isolate the issue 5. **Check relationships** if entity interactions are involved 6. **Fix the issue** in your code ### Testing System Dependencies 1. **Run your game** from the editor 2. **Disable systems one at a time** using the Status column 3. **Observe game behavior** for each disabled system 4. **Document dependencies** you discover 5. **Design systems to be more independent** if needed ## 📊 Understanding System Metrics When you expand a system in the Systems panel, you'll see detailed metrics: **Execution Time (ms):** - Time spent in the system's `process()` function - Lower is better (aim for < 1ms for most systems) - Spikes indicate performance issues **Entity Count:** - Number of entities that matched the system's query - High counts + high execution time = optimization needed - Zero entities may indicate query issues **Archetype Count:** - Number of unique component combinations processed - Higher counts can impact performance - See [Performance Optimization](PERFORMANCE_OPTIMIZATION.md#archetype-optimization) **Parallel Processing:** - `true` if system uses parallel iteration - `false` for sequential processing - Parallel systems can process entities faster **Subsystem Info:** - For multi-subsystem systems (advanced feature) - Shows entity count per subsystem ## ⚠️ Troubleshooting ### Debug Viewer Shows "Debug mode is disabled" **Solution:** 1. Go to `Project > Project Settings` 2. Navigate to `GECS` category 3. Enable "Debug Mode" checkbox 4. Restart your game > 💡 **Performance Note**: Debug mode adds overhead. Disable it for production builds. ### No Entities/Systems Appearing **Possible causes:** 1. Game isn't running - Press F5 or F6 to run from editor 2. World not created - Verify `ECS.world` exists in your code 3. Entities/Systems not added to world - Check `world.add_child()` calls ### Component Properties Not Updating **Solution:** - Component properties update when they change - Properties without `@export` won't be visible - Make sure your systems are modifying component properties correctly ### Systems Not Toggling **Possible causes:** 1. System has `paused` property set - Check system code 2. Debugger connection lost - Restart the game 3. System is critical - Some systems might ignore toggle requests ## 🎯 Best Practices ### During Development ✅ **Do:** - Keep debug viewer open while testing gameplay - Sort systems by time regularly to catch performance regressions - Use entity search to track specific entities - Disable systems to test game behavior ❌ **Don't:** - Leave debug mode enabled in production builds - Rely on system toggling for game logic (use proper activation patterns) - Expect perfect frame timing (debug mode adds overhead) ### For Performance Tuning 1. **Baseline first**: Run game without debug viewer, note FPS 2. **Enable debug viewer**: Identify expensive systems 3. **Focus on top 3**: Optimize the slowest systems first 4. **Measure impact**: Re-check execution times after changes 5. **Disable debug mode**: Always profile final builds without debug overhead ## 🚀 Advanced Tips ### Custom Component Serialization If your component properties aren't showing up properly: ```gdscript # Mark properties with @export for debug visibility class_name C_CustomData extends Component @export var visible_property: int = 0 # ✅ Shows in debug viewer var hidden_property: int = 0 # ❌ Won't appear ``` ### Relationship Debugging Use the debug viewer to verify complex relationship queries: 1. **Create test entities** with relationships 2. **Check relationship display** in Entities panel 3. **Verify relationship properties** are correct 4. **Test relationship queries** in your systems ### Performance Profiling Workflow Combine debug viewer with Godot's profiler: 1. **Debug Viewer**: Identify slow ECS systems 2. **Godot Profiler**: Deep-dive into specific functions 3. **Fix bottlenecks**: Optimize based on both tools 4. **Verify improvements**: Check both metrics improve ## 📚 Related Documentation - **[Core Concepts](CORE_CONCEPTS.md)** - Understanding entities, components, and systems - **[Performance Optimization](PERFORMANCE_OPTIMIZATION.md)** - Optimize systems identified as bottlenecks - **[Relationships](RELATIONSHIPS.md)** - Working with entity relationships - **[Troubleshooting](TROUBLESHOOTING.md)** - Common issues and solutions ## 💡 Summary The Debug Viewer is your window into the ECS runtime. Use it to: - 🔍 Monitor system performance and identify bottlenecks - 🎮 Inspect entities and components in real-time - 🔗 Visualize relationships between entities - ⚡ Toggle systems on/off for debugging - 📊 Track entity counts and archetype distribution > **Pro Tip**: Pop out the debug viewer to a second monitor and leave it visible while developing. You'll catch performance issues and bugs much faster! --- **Next Steps:** - Learn about [Performance Optimization](PERFORMANCE_OPTIMIZATION.md) to fix bottlenecks you discover - Explore [Relationships](RELATIONSHIPS.md) to understand entity connections better - Check [Troubleshooting](TROUBLESHOOTING.md) if you encounter issues