The Debug and Release

It took about a month to port a big application from Visual Studio 6 and the Oracle 8i client to Visual Studio 2005 and the Oracle 10g client. There were some show stoppers that had to be overcome along the way. One major problem was database calls between different threads colliding with each other. This got resolved using Pro*C directives which explicitly manage database contexts between threads.

This past week I wrapped up unit tests all the functionality in the application. I corrected the last couple bugs and told my team lead that things were looking good. The tests were all conducted using the debug version of the application. If the release version worked just as well, we would actually come out ahead of schedule. A coworker started working on the build script that would bundle the install for my application. He wanted the code for a release version of the application so he could use the real code to test the build script modifications. I spent less than a day to get the release configuration of the application to correctly compile and link.

I started to do some smoke tests on the release version of the application. That's when the horror began. All kinds of functionality that worked fine in debug mode was hosed in release mode. The application is now aborting in a number of places. It is disturbing since, when in release mode, the application just disappears sometimes when it aborts. And there are a lot of controls which are showing garbage in release mode. I broke the bad news to my team lead, who in turn passed the surprise on to upper management. The only good news it that some of the problem symptoms in release mode appear to be similar. I am hoping that I can find the cause of one of these common problems, and apply it everywhere to quickly reduce the number of bugs. The bottom line is that I have about a week to knock out these problems. However problems are harder to isolate when you are running the release version of the code. We will need all the luck we can get.