There's nothing worse than finding you still have a serious crash bug a week before gold master. It happened to me on Creatures 3, and although it was exhilarating, it was also terrifying that if we didn't fix it we would miss the CD factory slot. As serious software developers we need better tools available as standard to end this kind of problem for good. So it was with some interest that I installed Great Circle, Geodesic's testing and diagnostic environment.
At first glance Great Circle appears to be just a memory problem detector. The underlying technology is quite clever; it's really a general-purpose garbage collector for C++ (more about this later); with little performance overhead you can connect it to your game and observe it while it's running.
Great Circle can detect memory bounds overwriting, multiple calls to free on the same piece of memory, and memory leaks. For me the most exciting feature is memory profiling, which would have detected our problem with Creatures 3.
In contrast to memory leaks, you sometimes get memory used up which is freed when the application shuts down but goes out of control while it is running. A memory profile lets you view allocated memory at any point while the game is running, with a stack trace for each allocation. This information can be used to fix memory drains and reduce the memory footprint.
So, how hard is it to use Great Circle? There are two ways of attaching it to your program, either by injection into an existing application, or by recompiling. I had difficulty with both, because when something goes wrong you don't get a decent error message; it just doesn't work. A good knowledge of Visual C++ is essential to help interpret the manual's confusing instructions. There are several tricks you might need to use to get it going. Geodesic's customer support helpline is very good, so when you have trouble they should be able to help you get it on track. Keep in mind that all products of this nature are quite hard to set up.
Once up and running you view information from a web browser. This makes the interface quite familiar and reliable, but also fairly clunky. Errors in the program are quickly highlighted in red and you can click through to a call stack to find the source of the problem.
The quality of information is by and large good, but sometimes there is spurious extra data. For example, memory allocations mysteriously appear with no call stack. It would be useful if Great Circle at least listed the library in which the allocation occurred.
I tried Great Circle out on a game that Creature Labs is about to release which has a memory drain. Unfortunately, the problem turned out to be undetectable by most tools, including Great Circle. The leaking memory was not on the heap but allocated in a different way by DirectX. Great Circle is very cross platform and has no Windows API- or library-specific features, so it isn't surprising that it didn't catch this. However, there is room in the market for a tool with far more heuristics and which looks at the memory that Windows reports is used by the process, rather than trusting an overloaded malloc function.
Great Circle's Heap Statistics function at work.
Great Circle isn't very well suited to the game industry. It is very cross platform for the business world but is no good for game consoles. It supports injection to help with systems integrators who struggle with legacy applications, when game companies always have the source code. There is, however, a separate companion product using the same technology which may be useful, called Geodesic Runtime Solutions, which is a library that you compile into your released application. If you have missed any memory errors, it compensates for them, both by acting as a C++ garbage collector and by preventing obvious mistakes such as double frees. The garbage collector actually scans memory for pointers which may refer to a block of memory and if it doesn't find any it recycles the memory. This could add an extra layer of stability to your game client or server. It's also the only solution if the memory leak is in a third-party library for which you do not have the source code.
Overall, Great Circle isn't particularly cheap at $1,495. Check out the competition before buying. Having said that, keep the Runtime Solutions in mind; it may just give your next game server that extra fraction of a percent at uptime.
Note: Great Circle will only run under Windows NT, 2000, or XP operating systems. This product is not available for Windows 98.