Code Focused

Test Out Code Variations at Runtime Using a Static Variable

Recompiling source code while debugging is possible, but sometimes your C++ project might not be configured to use it.

In this tip, I'd like to show a simple technique that allows switching between multiple versions of the code at runtime.

Often, when I'm testing a new solution, I'd like to run an old version and make a comparison, just to find out: Is my new method better or not? Sometimes it's even worthwhile to try several different approaches. In C++ apps this might not be super-easy because you need to recompile your project every time. But what if you could do it at runtime?

In Visual Studio there's an efficient option: Edit and Continue. While debugging, you can recompile the code and see changes while the app is running. While E&C is greatly improved in the more recent VS 2015, there are still some limitations (read more here). But in older versions of Visual Studio, for example, you aren't allowed to use the feature on 64-bit code. It's for those situations I'd like to show a simplified, "manual" version.

The approach might sound silly at first. But it works! Just add one static variable to the code. The variable could be a Boolean value or an integer, depending on your needs. Use it like this:

static bool bEnableMyNewFeature = true;  
  if (bEnableMyNewFeature) newSolution(); else oldSolution();  

Then, while debugging, you can change the value of this variable. Immediately you'll be able to see results, as shown in Figure 1. The variable must be static, so there's only one for all of the function's execution.

[Click on image for larger view.] Figure 1. Testing Out Code Variations at Runtime

How can you change the value during debugging? Go to the watch window or just hover on top of the variable. You'll see an edit box where the value can be changed.

I used this simple variable technique in places where I want to experiment with some options for new solutions. I can enable it, play with that, see if nothing breaks. The drawbacks: You have to know what code versions you want. The set of options must be well-defined. There's no way to write some new code while running the app (not without using Edit and Continue or some other advanced techniques).

The method I presented here might not work well in multithreaded code. There's a high chance not all threads will see the variable change immediately so that it might cause some additional problems. Still, for linear code, it should work relatively well.

Please remember to disable or, better, remove that ugly variable in the final builds and commits!

About the Author

Bartlomiej Filipek is a software developer in Poland who specializes in C++, Windows and graphics programming. He worked for a number of companies developing multimedia, document editors, games, graphics drivers and flight planning systems, and has taught game development at local university. Follow Bart's blog at http://www.bfilipek.com and on Twitter @fenbf.

comments powered by Disqus

Featured

  • AI for GitHub Collaboration? Maybe Not So Much

    No doubt GitHub Copilot has been a boon for developers, but AI might not be the best tool for collaboration, according to developers weighing in on a recent social media post from the GitHub team.

  • Visual Studio 2022 Getting VS Code 'Command Palette' Equivalent

    As any Visual Studio Code user knows, the editor's command palette is a powerful tool for getting things done quickly, without having to navigate through menus and dialogs. Now, we learn how an equivalent is coming for Microsoft's flagship Visual Studio IDE, invoked by the same familiar Ctrl+Shift+P keyboard shortcut.

  • .NET 9 Preview 3: 'I've Been Waiting 9 Years for This API!'

    Microsoft's third preview of .NET 9 sees a lot of minor tweaks and fixes with no earth-shaking new functionality, but little things can be important to individual developers.

  • Data Anomaly Detection Using a Neural Autoencoder with C#

    Dr. James McCaffrey of Microsoft Research tackles the process of examining a set of source data to find data items that are different in some way from the majority of the source items.

  • What's New for Python, Java in Visual Studio Code

    Microsoft announced March 2024 updates to its Python and Java extensions for Visual Studio Code, the open source-based, cross-platform code editor that has repeatedly been named the No. 1 tool in major development surveys.

Subscribe on YouTube