{"id":129,"date":"2008-03-02T00:31:33","date_gmt":"2008-03-01T23:31:33","guid":{"rendered":"http:\/\/t-machine.org\/index.php\/2008\/03\/02\/improving-your-dev-process-automating-collection-of-game-crash-info\/"},"modified":"2008-03-02T00:31:33","modified_gmt":"2008-03-01T23:31:33","slug":"improving-your-dev-process-automating-collection-of-game-crash-info","status":"publish","type":"post","link":"http:\/\/new.t-machine.org\/index.php\/2008\/03\/02\/improving-your-dev-process-automating-collection-of-game-crash-info\/","title":{"rendered":"Improving your dev process: Automating collection of game-crash info"},"content":{"rendered":"<p>(As spotted in last month&#8217;s Game Developer magazine&#8217;s Inner Product column. Good enough that I wanted to draw some attention to it, and hopefully add a bunch more of these good ideas as I come across them \/ remember them)<\/p>\n<p>Most games, when they crash hard enough, memory dump. The customer (or internal tester during development) can then be requested by the dev team to find a specific file in a specific directory (the mem dump) and email it to them for analysis.<\/p>\n<p>Some games actually popup a dialogue to the user, to tell them about this file, and where to find it, and who to email it to.<\/p>\n<p>Some even include some contextual information automatically (&#8220;the user was on Level 3, and has the following DirectX hardware info&#8221;). Most just ask the user to fill in a field &#8220;telling us what you were doing when it crashed&#8221;.<\/p>\n<p>Most games, during development, automatically either popup &#8211; or display in a custom textarea &#8211; a message every time somethign unexpected happens, something that MIGHT be a symptom of a bug. There are even conference talks about <a href=\"http:\/\/scottbilas.googlepages.com\/optimizing_the_development_pipeline.ppsx\">how to avoid making your playtesters so sick of error messages that they stop bothering to read them<\/a>, and hence the messages become mostly a waste of time.<\/p>\n<p>How many games do a simple call to the SQL client library to send to the local SQL server a simple detailed report of what happened, when, why, and how bad it was? This information is ALL already available, but how hard is it to copy\/past the following into your source code and execute it as an SQL command?<\/p>\n<blockquote><p>INSERT INTO reports.errors (time, problem, severity, stacktrace, user, IP, clientversion) values (TIMENOW(), &#8220;+assertion.getMessage()+&#8221;, &#8220;+assertion.getLevel()+&#8221;, &#8220;+assertion.getStacktrace()+&#8221;, &#8220;+assertion.getUsername()+&#8221;, &#8220;+system.getLocalIPAddress()+&#8221;, &#8220;+client.getVersion()&#8221; );<\/p><\/blockquote>\n<p>Nice idea &#8211; free, detailed, metrics on exactly why, when, and where your game exe is crashing, any unexpected problems, anyone who&#8217;s running an out-of-date version, etc.<\/p>\n<p>And with the dev team no longer having to rely on users *actually bothering to tell them* when they see big flashing warnings and errors, we might avoid some of the programmer\/artist antipathy (&#8220;[artist] hey, can you help me with something?&#8221; &#8220;[programmer] its got an error! no wonder it doesnt&#8217; work!&#8221;, &#8220;oh, ignore that, it always does that&#8221;, &#8220;um, how long has it been &#8216;always&#8217; doing that?&#8221;, &#8220;ever since around the time the game started running really slowly, 2 months ago. It sucks &#8211; now everything takes me twice as long to test. But that&#8217;s just life, I guess&#8221; [cue: programmer grinds teeth, smashes forehead on desk, or similar]).<\/p>\n<p>NB: I have nothing against artists. They are just an easy scapegoat for a not-very-funny-but-actually-quite-painful-if-you&#8217;ve-been-there joke. No artists were harmed in the making of this post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(As spotted in last month&#8217;s Game Developer magazine&#8217;s Inner Product column. Good enough that I wanted to draw some attention to it, and hopefully add a bunch more of these good ideas as I come across them \/ remember them) Most games, when they crash hard enough, memory dump. The customer (or internal tester during [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,28,20],"tags":[],"_links":{"self":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/129"}],"collection":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":0,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"wp:attachment":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}