SlideShare a Scribd company logo
1 of 45
Download to read offline
Game Programming
Development Tools
Nick Prühs
Objectives
• To understand the importance of improved workflows
• To get an idea of which kinds of useful tools are out there
• To learn how to integrate tools into your daily workflow
2 / 43
Automated Builds
• Allow you to create nightly releases of your current game version
• Automate any pre- and post-build steps required for creating new
builds
• Track build successes and failures and their reasons
• Provide access to previous builds (history)
• Can parameterize build input and output
3 / 43
Automated Builds
4 / 43
Jenkins CI – Slash Games
Automated Builds
5 / 43
Jenkins CI – Project Page
Typical Build Steps
• Accessing source control
▪ Syncing working copy
▪ Creating tags
• Writing version numbers
• Performing the actual build
• Packaging the build result
• Publishing the game on a build page
• Running unit tests
• Sending email notifications
6 / 43
Automated Builds
7 / 43
Jenkins CI – Project Configuration
Automated Builds
8 / 43
Jenkins CI – Build Result
API Documentation
• Can be automatically generated from properly formatted source
code comments
• Output format may vary (usually HTML)
• Tools are available for all major object-oriented languages (Javadoc,
Sandcastle, Doxygen)
9 / 43
Javadoc
10 / 43
Javadoc Comments
Javadoc
11 / 43
Javadoc – Invoked From Command Line
javadoc -d api -sourcepath src -subpackages com.example.project
Javadoc
12 / 43
Javadoc API Documentation
Sandcastle
13 / 43
XML Documentation Comments
Sandcastle
14 / 43
Sandcastle Help File Builder GUI
Sandcastle
15 / 43
MSDN-Style API Documentation
Doxygen
16 / 43
Doxygen Comment Blocks
Doxygen
17 / 43
Doxygen GUI Frontend
Doxygen
18 / 43
Doxygen API Documentation
Analytics in Games
• Track the origin, device and operation system of your players
• Track user engagement
▪ Retention
▪ A/B testing
• Track monetization success
• Track performance
▪ Framerate
▪ Crashes
19 / 43
Analytics in Games
• Involve many key questions
▪ What to track
▪ How to track (who, what, where, when)
▪ How to analyze data
• Enough material for a whole different course
20 / 43
Analytics in Games
21 / 43
Game Analytics Website
Analytics in Games
22 / 43
Game Analytics API Call
private void OnVictory(Event e)
{
var victoryData = (VictoryEventData)e.EventData;
var eventKey = string.Format
("Level:Victory:{0}:{1}", this.currentLevel, victoryData.Type);
GA.API.Design.NewEvent(eventKey);
}
Analytics in Games
23 / 43
Game Analytics Metrics
Analytics in Games
24 / 43
Game Analytics Funnel
Consistent Code Style
• StyleCop analyzes C# source code to enforce a set of style and
consistency rules
• Helps developers avoid common pitfalls and mistakes
• Settings file can be checked in to version control
25 / 43
Consistent Code Style
StyleCop Settings Dialog in Visual Studio 2012
26 / 43
Consistent Code Style
Part of a StyleCop Settings File
<StyleCopSettings Version="105">
<GlobalSettings>
<StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
<CollectionProperty Name="RecognizedWords">
<Value>Bresenham</Value>
<Value>Dijkstra</Value>
<Value>Endre</Value>
<Value>Fredman</Value>
<Value>multigraph</Value>
<Value>Stee</Value>
<Value>Tarjan</Value>
<Value>Tarjan's</Value>
<Value>unweighted</Value>
</CollectionProperty>
</GlobalSettings>
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
<Rules>
<Rule Name="DocumentationTextMustContainWhitespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
<Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
27 / 43
Consistent Code Style
StyleCop Warnings in Visual Studio 2012
28 / 43
Static Code Analysis
• ReSharper provides static code analysis
• Many, many shortcuts and quick fixes
• Improved refactoring
• Improved search features
• Code templates
29 / 43
Static Code Analysis
R# Static Code Analysis in Visual Studio 2012
30 / 43
Static Code Analysis
R# Suggestions in Visual Studio 2012
31 / 43
Static Code Analysis
R# Suggestions in Visual Studio 2012
32 / 43
Static Code Analysis
R# Suggestions in Visual Studio 2012
33 / 43
Eclipse
Eclipse Java Code Style Clean Up Settings
34 / 43
Eclipse
Eclipse Java Code Style Clean Up Settings
35 / 43
Hint
Setting up tools will always take
the same time.
Thus, the earlier you set up your
tools, the greater your benefit!
36 / 43
Crash Dump Analaysis
• Sadly, even released games and tools will sometimes crash
• Windows can automatically generate a minidump whenever a
program throws an unhandled exception
▪ Loaded modules
▪ Thread information
▪ Current call stack
• These can be loaded and debugged in Visual Studio
37 / 43
Crash Dump Analaysis
38 / 43
C:Program FilesProcdump>procdump.exe -ma -i D:TempDumps
ProcDump v7.0 - Writes process dump files
Copyright (C) 2009-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
Set to:
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug
(REG_SZ) Auto = 1
(REG_SZ) Debugger = "C:Program FilesProcdumpprocdump.exe" -accepteula -ma
-j "D:TempDumps" %ld %ld %p
Set to:
HKLMSOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebug
(REG_SZ) Auto = 1
(REG_SZ) Debugger = "C:Program FilesProcdumpprocdump.exe" -accepteula -ma
-j "D:TempDumps" %ld %ld %p
ProcDump is now set as the Just-in-time (AeDebug) debugger.
Crash Dump Analaysis
39 / 43
C:Program FilesProcdump>procdump.exe -u
ProcDump v7.0 - Writes process dump files
Copyright (C) 2009-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
Reset to:
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug
(REG_SZ) Auto = <deleted>
(REG_SZ) Debugger = "C:WINDOWSsystem32vsjitdebugger.exe" -p %ld -e %ld
Reset to:
HKLMSOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebug
(REG_SZ) Auto = <deleted>
(REG_SZ) Debugger = "C:WINDOWSsystem32vsjitdebugger.exe" -p %ld -e %ld
ProcDump is no longer the Just-in-time (AeDebug) debugger.
Crash Dump Analaysis
40 / 43
Deferencing a nullptr that will cause a crash
Crash Dump Analaysis
41 / 43
Minidump File Summary in Visual Studio
Crash Dump Analaysis
42 / 43
Debugging a Minidump in Visual Studio
References
• Croy, Bayer, Kawaguchi. Jenkins CI. http://www.Jenkins.io, May 2017.
• Oracle. Javadoc. http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-
135444.html., May 2017 6.
• Woodruff. Sandcastle Help File Builder. https://github.com/EWSoftware/SHFB, May 2017.
• Dimitri. Doxygen. http://www.stack.nl/~dimitri/doxygen/, May 2017.
• GameAnalytics. GameAnalytics. http://www.gameanalytics.com/, May 2017.
• Microsoft. StyleCop. https://github.com/StyleCop/StyleCop, May 2017.
• JetBrains. Resharper. http://www.jetbrains.com/resharper/, May 2017.
• The Eclipse Foundation. Eclipse. https://www.eclipse.org/, May 2017.
• MSDN. Crash Dump Analysis. http://msdn.microsoft.com/en-
us/library/windows/desktop/ee416349(v=vs.85).aspx, May 2017.
• MSDN. Collecting User-Mode Dumps. http://msdn.microsoft.com/en-
us/library/bb787181(VS.85).aspx, May 2017.
• Russinovich. ProcDump. http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx,
November 18, 2016.
43 / 43
Thank you!
http://www.npruehs.de
https://github.com/npruehs
@npruehs
nick.pruehs@daedalic.com
5 Minute Review Session
• Which steps can be automated using a build server?
• How can API documentation be generated automatically?
• Which data can be tracked by analytics?
• How can you enforce a consistent code style within your team?
• Which tools can help you to detect code quality issues?
• How can you debug applications that crashed outside of Visual
Studio?

More Related Content

What's hot

Component-Based Entity Systems (Demo)
Component-Based Entity Systems (Demo)Component-Based Entity Systems (Demo)
Component-Based Entity Systems (Demo)Nick Pruehs
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsNick Pruehs
 
Game Programming 00 - Exams
Game Programming 00 - ExamsGame Programming 00 - Exams
Game Programming 00 - ExamsNick Pruehs
 
Style & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity SystemsStyle & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity SystemsNick Pruehs
 
Game Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentGame Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentNick Pruehs
 
Game Programming 09 - AI
Game Programming 09 - AIGame Programming 09 - AI
Game Programming 09 - AINick Pruehs
 
Game Programming 01 - Introduction
Game Programming 01 - IntroductionGame Programming 01 - Introduction
Game Programming 01 - IntroductionNick Pruehs
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud DevelopmentNick Pruehs
 
Game Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesGame Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesNick Pruehs
 
Game Programming 10 - Localization
Game Programming 10 - LocalizationGame Programming 10 - Localization
Game Programming 10 - LocalizationNick Pruehs
 
ECS: Making the Entity Debugger - Unite LA
ECS: Making the Entity Debugger - Unite LAECS: Making the Entity Debugger - Unite LA
ECS: Making the Entity Debugger - Unite LAUnity Technologies
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesLewis Brierley
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesLewis Brierley
 
Maximize Your Production Effort (English)
Maximize Your Production Effort (English)Maximize Your Production Effort (English)
Maximize Your Production Effort (English)slantsixgames
 
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...gamifi.cc
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutronRossella Sblendido
 
Y1 gd engine_terminologY
Y1 gd engine_terminologYY1 gd engine_terminologY
Y1 gd engine_terminologYElliotBlack
 

What's hot (19)

Component-Based Entity Systems (Demo)
Component-Based Entity Systems (Demo)Component-Based Entity Systems (Demo)
Component-Based Entity Systems (Demo)
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine Basics
 
Game Programming 00 - Exams
Game Programming 00 - ExamsGame Programming 00 - Exams
Game Programming 00 - Exams
 
Style & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity SystemsStyle & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity Systems
 
Game Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentGame Programming 08 - Tool Development
Game Programming 08 - Tool Development
 
Game Programming 09 - AI
Game Programming 09 - AIGame Programming 09 - AI
Game Programming 09 - AI
 
Game Programming 01 - Introduction
Game Programming 01 - IntroductionGame Programming 01 - Introduction
Game Programming 01 - Introduction
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud Development
 
Game Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesGame Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design Principles
 
Game Programming 10 - Localization
Game Programming 10 - LocalizationGame Programming 10 - Localization
Game Programming 10 - Localization
 
ECS: Making the Entity Debugger - Unite LA
ECS: Making the Entity Debugger - Unite LAECS: Making the Entity Debugger - Unite LA
ECS: Making the Entity Debugger - Unite LA
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
 
Maximize Your Production Effort (English)
Maximize Your Production Effort (English)Maximize Your Production Effort (English)
Maximize Your Production Effort (English)
 
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutron
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Testing In Agile
Testing In AgileTesting In Agile
Testing In Agile
 
Y1 gd engine_terminologY
Y1 gd engine_terminologYY1 gd engine_terminologY
Y1 gd engine_terminologY
 

Viewers also liked

Game Programming 03 - Git Flow
Game Programming 03 - Git FlowGame Programming 03 - Git Flow
Game Programming 03 - Git FlowNick Pruehs
 
Game Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity SystemsGame Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity SystemsNick Pruehs
 
Tool Development A - Git
Tool Development A - GitTool Development A - Git
Tool Development A - GitNick Pruehs
 
Game Programming 11 - Game Physics
Game Programming 11 - Game PhysicsGame Programming 11 - Game Physics
Game Programming 11 - Game PhysicsNick Pruehs
 
Game Models - A Different Approach
Game Models - A Different ApproachGame Models - A Different Approach
Game Models - A Different ApproachNick Pruehs
 
Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Simon Schmid
 
Designing an actor model game architecture with Pony
Designing an actor model game architecture with PonyDesigning an actor model game architecture with Pony
Designing an actor model game architecture with PonyNick Pruehs
 
ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016Simon Schmid
 
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Simon Schmid
 
Well known magazine name analysis
Well known magazine name analysisWell known magazine name analysis
Well known magazine name analysisshaunWhelan
 
المعارض والمؤتمرات شهر يونيو
المعارض والمؤتمرات شهر يونيوالمعارض والمؤتمرات شهر يونيو
المعارض والمؤتمرات شهر يونيوPalestinian Business Forum
 
Chemo senses
Chemo sensesChemo senses
Chemo sensesNou Vang
 

Viewers also liked (13)

Game Programming 03 - Git Flow
Game Programming 03 - Git FlowGame Programming 03 - Git Flow
Game Programming 03 - Git Flow
 
Game Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity SystemsGame Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity Systems
 
Tool Development A - Git
Tool Development A - GitTool Development A - Git
Tool Development A - Git
 
Game Programming 11 - Game Physics
Game Programming 11 - Game PhysicsGame Programming 11 - Game Physics
Game Programming 11 - Game Physics
 
Game Models - A Different Approach
Game Models - A Different ApproachGame Models - A Different Approach
Game Models - A Different Approach
 
Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015
 
Designing an actor model game architecture with Pony
Designing an actor model game architecture with PonyDesigning an actor model game architecture with Pony
Designing an actor model game architecture with Pony
 
ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016
 
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
 
AAA Automated Testing
AAA Automated TestingAAA Automated Testing
AAA Automated Testing
 
Well known magazine name analysis
Well known magazine name analysisWell known magazine name analysis
Well known magazine name analysis
 
المعارض والمؤتمرات شهر يونيو
المعارض والمؤتمرات شهر يونيوالمعارض والمؤتمرات شهر يونيو
المعارض والمؤتمرات شهر يونيو
 
Chemo senses
Chemo sensesChemo senses
Chemo senses
 

Similar to Game Dev Tools Automate Builds API Docs Analytics Code Style

Video game development for everybody
Video game development for everybodyVideo game development for everybody
Video game development for everybodySarah Sexton
 
.NET Debugging Tips and Techniques
.NET Debugging Tips and Techniques.NET Debugging Tips and Techniques
.NET Debugging Tips and TechniquesBala Subra
 
.Net Debugging Techniques
.Net Debugging Techniques.Net Debugging Techniques
.Net Debugging TechniquesBala Subra
 
Debugging a .NET program after crash (Post-mortem debugging)
Debugging a .NET program after crash (Post-mortem debugging)Debugging a .NET program after crash (Post-mortem debugging)
Debugging a .NET program after crash (Post-mortem debugging)Mirco Vanini
 
VB2013 - Security Research and Development Framework
VB2013 - Security Research and Development FrameworkVB2013 - Security Research and Development Framework
VB2013 - Security Research and Development FrameworkAmr Thabet
 
RSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamRSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamAhmed Sallam
 
Code checkup
Code checkupCode checkup
Code checkupDoug Mair
 
Build automation best practices
Build automation best practicesBuild automation best practices
Build automation best practicesCode Mastery
 
Mapping Detection Coverage
Mapping Detection CoverageMapping Detection Coverage
Mapping Detection CoverageJared Atkinson
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium EmulationRaghav Nayak
 
C# Production Debugging Made Easy
 C# Production Debugging Made Easy C# Production Debugging Made Easy
C# Production Debugging Made EasyAlon Fliess
 
Under the Wire PowerShell workshop - BSides Augusta 2018
Under the Wire PowerShell workshop - BSides Augusta 2018Under the Wire PowerShell workshop - BSides Augusta 2018
Under the Wire PowerShell workshop - BSides Augusta 2018Fernando Tomlinson, CISSP, MBA
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Cooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionCooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionJulian Dunn
 
Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7mspgermany
 

Similar to Game Dev Tools Automate Builds API Docs Analytics Code Style (20)

Diagnosing issues in your ASP.NET applications in production with Visual Stud...
Diagnosing issues in your ASP.NET applications in production with Visual Stud...Diagnosing issues in your ASP.NET applications in production with Visual Stud...
Diagnosing issues in your ASP.NET applications in production with Visual Stud...
 
Video game development for everybody
Video game development for everybodyVideo game development for everybody
Video game development for everybody
 
.NET Debugging Tips and Techniques
.NET Debugging Tips and Techniques.NET Debugging Tips and Techniques
.NET Debugging Tips and Techniques
 
.Net Debugging Techniques
.Net Debugging Techniques.Net Debugging Techniques
.Net Debugging Techniques
 
Debugging a .NET program after crash (Post-mortem debugging)
Debugging a .NET program after crash (Post-mortem debugging)Debugging a .NET program after crash (Post-mortem debugging)
Debugging a .NET program after crash (Post-mortem debugging)
 
VB2013 - Security Research and Development Framework
VB2013 - Security Research and Development FrameworkVB2013 - Security Research and Development Framework
VB2013 - Security Research and Development Framework
 
RSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamRSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallam
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
Code checkup
Code checkupCode checkup
Code checkup
 
Build automation best practices
Build automation best practicesBuild automation best practices
Build automation best practices
 
Mapping Detection Coverage
Mapping Detection CoverageMapping Detection Coverage
Mapping Detection Coverage
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium Emulation
 
.NET Debugging Workshop
.NET Debugging Workshop.NET Debugging Workshop
.NET Debugging Workshop
 
Spug pt session2 - debuggingl
Spug pt session2 - debugginglSpug pt session2 - debuggingl
Spug pt session2 - debuggingl
 
C# Production Debugging Made Easy
 C# Production Debugging Made Easy C# Production Debugging Made Easy
C# Production Debugging Made Easy
 
Under the Wire PowerShell workshop - BSides Augusta 2018
Under the Wire PowerShell workshop - BSides Augusta 2018Under the Wire PowerShell workshop - BSides Augusta 2018
Under the Wire PowerShell workshop - BSides Augusta 2018
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
 
Cooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionCooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 Edition
 
Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7Usergroup 02 Berlin Windows7
Usergroup 02 Berlin Windows7
 

More from Nick Pruehs

Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsUnreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsNick Pruehs
 
Unreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User InterfaceUnreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User InterfaceNick Pruehs
 
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesUnreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesNick Pruehs
 
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayUnreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayNick Pruehs
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorNick Pruehs
 
Unreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkUnreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkNick Pruehs
 
Game Programming - Git
Game Programming - GitGame Programming - Git
Game Programming - GitNick Pruehs
 
Tool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool ChainsTool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool ChainsNick Pruehs
 

More from Nick Pruehs (8)

Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsUnreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual Effects
 
Unreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User InterfaceUnreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User Interface
 
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesUnreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior Trees
 
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayUnreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - Gameplay
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal Editor
 
Unreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkUnreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game Framework
 
Game Programming - Git
Game Programming - GitGame Programming - Git
Game Programming - Git
 
Tool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool ChainsTool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool Chains
 

Recently uploaded

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Recently uploaded (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

Game Dev Tools Automate Builds API Docs Analytics Code Style

  • 2. Objectives • To understand the importance of improved workflows • To get an idea of which kinds of useful tools are out there • To learn how to integrate tools into your daily workflow 2 / 43
  • 3. Automated Builds • Allow you to create nightly releases of your current game version • Automate any pre- and post-build steps required for creating new builds • Track build successes and failures and their reasons • Provide access to previous builds (history) • Can parameterize build input and output 3 / 43
  • 4. Automated Builds 4 / 43 Jenkins CI – Slash Games
  • 5. Automated Builds 5 / 43 Jenkins CI – Project Page
  • 6. Typical Build Steps • Accessing source control ▪ Syncing working copy ▪ Creating tags • Writing version numbers • Performing the actual build • Packaging the build result • Publishing the game on a build page • Running unit tests • Sending email notifications 6 / 43
  • 7. Automated Builds 7 / 43 Jenkins CI – Project Configuration
  • 8. Automated Builds 8 / 43 Jenkins CI – Build Result
  • 9. API Documentation • Can be automatically generated from properly formatted source code comments • Output format may vary (usually HTML) • Tools are available for all major object-oriented languages (Javadoc, Sandcastle, Doxygen) 9 / 43
  • 11. Javadoc 11 / 43 Javadoc – Invoked From Command Line javadoc -d api -sourcepath src -subpackages com.example.project
  • 12. Javadoc 12 / 43 Javadoc API Documentation
  • 13. Sandcastle 13 / 43 XML Documentation Comments
  • 14. Sandcastle 14 / 43 Sandcastle Help File Builder GUI
  • 15. Sandcastle 15 / 43 MSDN-Style API Documentation
  • 16. Doxygen 16 / 43 Doxygen Comment Blocks
  • 17. Doxygen 17 / 43 Doxygen GUI Frontend
  • 18. Doxygen 18 / 43 Doxygen API Documentation
  • 19. Analytics in Games • Track the origin, device and operation system of your players • Track user engagement ▪ Retention ▪ A/B testing • Track monetization success • Track performance ▪ Framerate ▪ Crashes 19 / 43
  • 20. Analytics in Games • Involve many key questions ▪ What to track ▪ How to track (who, what, where, when) ▪ How to analyze data • Enough material for a whole different course 20 / 43
  • 21. Analytics in Games 21 / 43 Game Analytics Website
  • 22. Analytics in Games 22 / 43 Game Analytics API Call private void OnVictory(Event e) { var victoryData = (VictoryEventData)e.EventData; var eventKey = string.Format ("Level:Victory:{0}:{1}", this.currentLevel, victoryData.Type); GA.API.Design.NewEvent(eventKey); }
  • 23. Analytics in Games 23 / 43 Game Analytics Metrics
  • 24. Analytics in Games 24 / 43 Game Analytics Funnel
  • 25. Consistent Code Style • StyleCop analyzes C# source code to enforce a set of style and consistency rules • Helps developers avoid common pitfalls and mistakes • Settings file can be checked in to version control 25 / 43
  • 26. Consistent Code Style StyleCop Settings Dialog in Visual Studio 2012 26 / 43
  • 27. Consistent Code Style Part of a StyleCop Settings File <StyleCopSettings Version="105"> <GlobalSettings> <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty> <CollectionProperty Name="RecognizedWords"> <Value>Bresenham</Value> <Value>Dijkstra</Value> <Value>Endre</Value> <Value>Fredman</Value> <Value>multigraph</Value> <Value>Stee</Value> <Value>Tarjan</Value> <Value>Tarjan's</Value> <Value>unweighted</Value> </CollectionProperty> </GlobalSettings> <Analyzers> <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules"> <Rules> <Rule Name="DocumentationTextMustContainWhitespace"> <RuleSettings> <BooleanProperty Name="Enabled">False</BooleanProperty> </RuleSettings> </Rule> <Rule Name="ConstructorSummaryDocumentationMustBeginWithStandardText"> <RuleSettings> <BooleanProperty Name="Enabled">False</BooleanProperty> </RuleSettings> </Rule> 27 / 43
  • 28. Consistent Code Style StyleCop Warnings in Visual Studio 2012 28 / 43
  • 29. Static Code Analysis • ReSharper provides static code analysis • Many, many shortcuts and quick fixes • Improved refactoring • Improved search features • Code templates 29 / 43
  • 30. Static Code Analysis R# Static Code Analysis in Visual Studio 2012 30 / 43
  • 31. Static Code Analysis R# Suggestions in Visual Studio 2012 31 / 43
  • 32. Static Code Analysis R# Suggestions in Visual Studio 2012 32 / 43
  • 33. Static Code Analysis R# Suggestions in Visual Studio 2012 33 / 43
  • 34. Eclipse Eclipse Java Code Style Clean Up Settings 34 / 43
  • 35. Eclipse Eclipse Java Code Style Clean Up Settings 35 / 43
  • 36. Hint Setting up tools will always take the same time. Thus, the earlier you set up your tools, the greater your benefit! 36 / 43
  • 37. Crash Dump Analaysis • Sadly, even released games and tools will sometimes crash • Windows can automatically generate a minidump whenever a program throws an unhandled exception ▪ Loaded modules ▪ Thread information ▪ Current call stack • These can be loaded and debugged in Visual Studio 37 / 43
  • 38. Crash Dump Analaysis 38 / 43 C:Program FilesProcdump>procdump.exe -ma -i D:TempDumps ProcDump v7.0 - Writes process dump files Copyright (C) 2009-2014 Mark Russinovich Sysinternals - www.sysinternals.com With contributions from Andrew Richards Set to: HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug (REG_SZ) Auto = 1 (REG_SZ) Debugger = "C:Program FilesProcdumpprocdump.exe" -accepteula -ma -j "D:TempDumps" %ld %ld %p Set to: HKLMSOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebug (REG_SZ) Auto = 1 (REG_SZ) Debugger = "C:Program FilesProcdumpprocdump.exe" -accepteula -ma -j "D:TempDumps" %ld %ld %p ProcDump is now set as the Just-in-time (AeDebug) debugger.
  • 39. Crash Dump Analaysis 39 / 43 C:Program FilesProcdump>procdump.exe -u ProcDump v7.0 - Writes process dump files Copyright (C) 2009-2014 Mark Russinovich Sysinternals - www.sysinternals.com With contributions from Andrew Richards Reset to: HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug (REG_SZ) Auto = <deleted> (REG_SZ) Debugger = "C:WINDOWSsystem32vsjitdebugger.exe" -p %ld -e %ld Reset to: HKLMSOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebug (REG_SZ) Auto = <deleted> (REG_SZ) Debugger = "C:WINDOWSsystem32vsjitdebugger.exe" -p %ld -e %ld ProcDump is no longer the Just-in-time (AeDebug) debugger.
  • 40. Crash Dump Analaysis 40 / 43 Deferencing a nullptr that will cause a crash
  • 41. Crash Dump Analaysis 41 / 43 Minidump File Summary in Visual Studio
  • 42. Crash Dump Analaysis 42 / 43 Debugging a Minidump in Visual Studio
  • 43. References • Croy, Bayer, Kawaguchi. Jenkins CI. http://www.Jenkins.io, May 2017. • Oracle. Javadoc. http://www.oracle.com/technetwork/java/javase/documentation/index-jsp- 135444.html., May 2017 6. • Woodruff. Sandcastle Help File Builder. https://github.com/EWSoftware/SHFB, May 2017. • Dimitri. Doxygen. http://www.stack.nl/~dimitri/doxygen/, May 2017. • GameAnalytics. GameAnalytics. http://www.gameanalytics.com/, May 2017. • Microsoft. StyleCop. https://github.com/StyleCop/StyleCop, May 2017. • JetBrains. Resharper. http://www.jetbrains.com/resharper/, May 2017. • The Eclipse Foundation. Eclipse. https://www.eclipse.org/, May 2017. • MSDN. Crash Dump Analysis. http://msdn.microsoft.com/en- us/library/windows/desktop/ee416349(v=vs.85).aspx, May 2017. • MSDN. Collecting User-Mode Dumps. http://msdn.microsoft.com/en- us/library/bb787181(VS.85).aspx, May 2017. • Russinovich. ProcDump. http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx, November 18, 2016. 43 / 43
  • 45. 5 Minute Review Session • Which steps can be automated using a build server? • How can API documentation be generated automatically? • Which data can be tracked by analytics? • How can you enforce a consistent code style within your team? • Which tools can help you to detect code quality issues? • How can you debug applications that crashed outside of Visual Studio?