Introduction to Debug Infrastructure
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Credits Menu

Enter Open URL (in new tab)
1:07Plan for today
1:07Plan for today
1:07Plan for today
2:34Test-driven development doesn't help solving the harder problems of game programming
2:34Test-driven development doesn't help solving the harder problems of game programming
2:34Test-driven development doesn't help solving the harder problems of game programming
4:59Purpose of debug services
4:59Purpose of debug services
4:59Purpose of debug services
6:331) Coaxing bugs to the surface
6:331) Coaxing bugs to the surface
6:331) Coaxing bugs to the surface
8:002) Locating bugs that are clearly present but difficult to pinpoint
8:002) Locating bugs that are clearly present but difficult to pinpoint
8:002) Locating bugs that are clearly present but difficult to pinpoint
11:58We'll focus on versatile debug services aimed at solving difficult bugs
11:58We'll focus on versatile debug services aimed at solving difficult bugs
11:58We'll focus on versatile debug services aimed at solving difficult bugs
13:21Logs. Example of debugging framerate problems
13:21Logs. Example of debugging framerate problems
13:21Logs. Example of debugging framerate problems
15:49We could start by recording our debug timers on each frame
15:49We could start by recording our debug timers on each frame
15:49We could start by recording our debug timers on each frame
16:35Simplifying the usage of our debug timers
16:35Simplifying the usage of our debug timers
16:35Simplifying the usage of our debug timers
17:38We could combine the log and the looped live code editing replay system
17:38We could combine the log and the looped live code editing replay system
17:38We could combine the log and the looped live code editing replay system
20:01Limitations of this approach - Is not particularly good for multithreading problems
20:01Limitations of this approach - Is not particularly good for multithreading problems
20:01Limitations of this approach - Is not particularly good for multithreading problems
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
22:16Diagramming
22:16Diagramming
22:16Diagramming
25:57We want all the debugging subsystems going through the same log
25:57We want all the debugging subsystems going through the same log
25:57We want all the debugging subsystems going through the same log
27:14We want to avoid having to change the code in order to debug it...
27:14We want to avoid having to change the code in order to debug it...
27:14We want to avoid having to change the code in order to debug it...
29:11...and also avoid having to remove debug calls once we're done
29:11...and also avoid having to remove debug calls once we're done
29:11...and also avoid having to remove debug calls once we're done
31:44Review of desired features for our debug system
31:44Review of desired features for our debug system
31:44Review of desired features for our debug system
32:56Will we need tuning/fiddling support?
32:56Will we need tuning/fiddling support?
32:56Will we need tuning/fiddling support?
36:40Let's start building the debug system
36:40Let's start building the debug system
36:40Let's start building the debug system
38:05The old debug cycle counters were lousy on purpose
38:05The old debug cycle counters were lousy on purpose
38:05The old debug cycle counters were lousy on purpose
43:00Improving the interface of the cycle counters
43:00Improving the interface of the cycle counters
43:00Improving the interface of the cycle counters
43:27Abusing constructor/destructor pairs to achieve that better interface
43:27Abusing constructor/destructor pairs to achieve that better interface
43:27Abusing constructor/destructor pairs to achieve that better interface
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
57:11"I just kind of ruined The Variable"α
57:11"I just kind of ruined The Variable"α
57:11"I just kind of ruined The Variable"α
1:01:03Review of the inner workings of the new cycle counter interface
1:01:03Review of the inner workings of the new cycle counter interface
1:01:03Review of the inner workings of the new cycle counter interface
1:02:15Testing that the code still runs after today's changes
1:02:15Testing that the code still runs after today's changes
1:02:15Testing that the code still runs after today's changes
1:02:37Q&A
🗩
1:02:37Q&A
🗩
1:02:37Q&A
🗩
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?β
🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?β
🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?β
🗪
1:14:08abnercoimbre Community fight
🗪
1:14:08abnercoimbre Community fight
🗪
1:14:08abnercoimbre Community fight
🗪
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩