<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Debugging Multiplayer Games</title>
	<atom:link href="http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/feed/" rel="self" type="application/rss+xml" />
	<link>http://gafferongames.com</link>
	<description>Glenn Fiedler&#039;s Game Development Articles and Tutorials</description>
	<lastBuildDate>Tue, 31 Jan 2012 03:56:23 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Glenn Fiedler</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1128</link>
		<dc:creator>Glenn Fiedler</dc:creator>
		<pubDate>Fri, 16 Apr 2010 17:08:47 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1128</guid>
		<description>sure that&#039;s one way to do it, but you&#039;d find the game would hitch a bit more because it has to wait to receive a packet every frame vs. being able to have an amount of time n where it would proceed without blocking</description>
		<content:encoded><![CDATA[<p>sure that&#8217;s one way to do it, but you&#8217;d find the game would hitch a bit more because it has to wait to receive a packet every frame vs. being able to have an amount of time n where it would proceed without blocking</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gatsby</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1127</link>
		<dc:creator>Gatsby</dc:creator>
		<pubDate>Thu, 15 Apr 2010 11:48:27 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1127</guid>
		<description>interesting article

just have one thing to say about &quot;Synchronous Debugging&quot;:

you know, if you used blocking sockets you wouldn&#039;t have to mess with the timeouts when breaking in the first place. and you could simply hit break as you intended. you could optimize later, when the game works.</description>
		<content:encoded><![CDATA[<p>interesting article</p>
<p>just have one thing to say about &#8220;Synchronous Debugging&#8221;:</p>
<p>you know, if you used blocking sockets you wouldn&#8217;t have to mess with the timeouts when breaking in the first place. and you could simply hit break as you intended. you could optimize later, when the game works.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Swiss Tony</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1126</link>
		<dc:creator>Swiss Tony</dc:creator>
		<pubDate>Wed, 17 Feb 2010 18:33:29 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1126</guid>
		<description>I&#039;d also add a &#039;debugging&#039; flag for each clients, based on the result of IsDebuggerPresent() (PC), and passing that flag to all other players. If you have a client that does not respond for a lengthy period of time, but has a debugger attached to him, you can assume he&#039;s hit a breakpoint and you should not disconnect him.

If he has no debugger and does not send heartbeats for 30 seconds, he&#039;s ready for a good kicking.</description>
		<content:encoded><![CDATA[<p>I&#8217;d also add a &#8216;debugging&#8217; flag for each clients, based on the result of IsDebuggerPresent() (PC), and passing that flag to all other players. If you have a client that does not respond for a lengthy period of time, but has a debugger attached to him, you can assume he&#8217;s hit a breakpoint and you should not disconnect him.</p>
<p>If he has no debugger and does not send heartbeats for 30 seconds, he&#8217;s ready for a good kicking.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: triton</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1125</link>
		<dc:creator>triton</dc:creator>
		<pubDate>Thu, 10 Sep 2009 23:09:42 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1125</guid>
		<description>Thanks, this is very useful advice. I&#039;m going to start implementing a multiplayer game and this sure is gonna be helpful.

Waiting for part 2 :)...</description>
		<content:encoded><![CDATA[<p>Thanks, this is very useful advice. I&#39;m going to start implementing a multiplayer game and this sure is gonna be helpful.</p>
<p>Waiting for part 2 <img src='http://gafferongames.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Glenn Fiedler</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1124</link>
		<dc:creator>Glenn Fiedler</dc:creator>
		<pubDate>Tue, 08 Sep 2009 22:47:02 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1124</guid>
		<description>yeah unreal does something similar in their demo recording and playback mode - it&#039;s pretty neat</description>
		<content:encoded><![CDATA[<p>yeah unreal does something similar in their demo recording and playback mode &#8211; it&#8217;s pretty neat</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Liam</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1123</link>
		<dc:creator>Liam</dc:creator>
		<pubDate>Tue, 08 Sep 2009 21:23:59 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1123</guid>
		<description>I thought you had gone on the run from the mad stalker :)

&quot;Notice how the socket receive function is not even called in journal playback mode&quot;
I realise this example code yet for the benefit or other readers. A good idea is to abstract the sending and receiving out to a router interface. These routers are created by a factory method and when a journal is required then a journalling router is attached, when not then normal router is. I feel it is good design (one of the &lt;a href=&quot;http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod&quot; rel=&quot;nofollow&quot;&gt;SOLID&lt;/a&gt; principles) and also makes the same (or near same) code path used for single and multiplayer versions. When there is to be no network communications a &quot;single instance&quot; router is used to route the messages and similarly in replay mode the messages are read from a stream and passed off.
Using the same code path is something which Dave Weinstein talked about in a past &lt;a href=&quot;https://store.cmpgame.com/product/1740/A-Case-for-Message-Passing-Architectures&quot; rel=&quot;nofollow&quot;&gt;GDC lecture&lt;/a&gt; which I would recommend to anything thinking of creating a networked game. He does make the point that using journalling makes you attractive to the armed forces; yet why you would want this I have no idea :)</description>
		<content:encoded><![CDATA[<p>I thought you had gone on the run from the mad stalker <img src='http://gafferongames.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8220;Notice how the socket receive function is not even called in journal playback mode&#8221;<br />
I realise this example code yet for the benefit or other readers. A good idea is to abstract the sending and receiving out to a router interface. These routers are created by a factory method and when a journal is required then a journalling router is attached, when not then normal router is. I feel it is good design (one of the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod" rel="nofollow">SOLID</a> principles) and also makes the same (or near same) code path used for single and multiplayer versions. When there is to be no network communications a &#8220;single instance&#8221; router is used to route the messages and similarly in replay mode the messages are read from a stream and passed off.<br />
Using the same code path is something which Dave Weinstein talked about in a past <a href="https://store.cmpgame.com/product/1740/A-Case-for-Message-Passing-Architectures" rel="nofollow">GDC lecture</a> which I would recommend to anything thinking of creating a networked game. He does make the point that using journalling makes you attractive to the armed forces; yet why you would want this I have no idea <img src='http://gafferongames.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Glenn Fiedler</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1122</link>
		<dc:creator>Glenn Fiedler</dc:creator>
		<pubDate>Tue, 08 Sep 2009 15:30:37 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1122</guid>
		<description>fixed - thanks!</description>
		<content:encoded><![CDATA[<p>fixed &#8211; thanks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Niklas Lundberg</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1121</link>
		<dc:creator>Niklas Lundberg</dc:creator>
		<pubDate>Tue, 08 Sep 2009 08:52:40 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1121</guid>
		<description>timeSinceLastHeartbeat += deltaTime; -&gt; timeSinceLastHeartbeat[i] += deltaTime;
at the end in the first code snippet</description>
		<content:encoded><![CDATA[<p>timeSinceLastHeartbeat += deltaTime; -&gt; timeSinceLastHeartbeat[i] += deltaTime;<br />
at the end in the first code snippet</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ben Garney</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1120</link>
		<dc:creator>Ben Garney</dc:creator>
		<pubDate>Mon, 07 Sep 2009 19:44:02 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1120</guid>
		<description>My favorite &quot;caught by a journal bug&quot; - game was up and on the same tick that the mission lobby ends and it switches to the next mission, everyone on the server turns on their voice chat, it would crash.

We only caught that one by virtue of long periods of stress testing + journalling. And even then it only happened once.

Are you going to cover fuzz input testing? (ie, having a process that simulates banging on the keys for extended periods?) I&#039;ve found that that is quite useful and a low-effort way to improve stability.</description>
		<content:encoded><![CDATA[<p>My favorite &#8220;caught by a journal bug&#8221; &#8211; game was up and on the same tick that the mission lobby ends and it switches to the next mission, everyone on the server turns on their voice chat, it would crash.</p>
<p>We only caught that one by virtue of long periods of stress testing + journalling. And even then it only happened once.</p>
<p>Are you going to cover fuzz input testing? (ie, having a process that simulates banging on the keys for extended periods?) I&#8217;ve found that that is quite useful and a low-effort way to improve stability.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wollnashorn</title>
		<link>http://gafferongames.com/networking-for-game-programmers/debugging-multiplayer-games/#comment-1119</link>
		<dc:creator>Wollnashorn</dc:creator>
		<pubDate>Mon, 07 Sep 2009 11:46:38 +0000</pubDate>
		<guid isPermaLink="false">http://gafferongames.com/?page_id=883#comment-1119</guid>
		<description>Yay! A new tutorial. Thanks, man.
It&#039;s really helpful.</description>
		<content:encoded><![CDATA[<p>Yay! A new tutorial. Thanks, man.<br />
It&#8217;s really helpful.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

