Rss Feed
Tweeter button
Facebook button
Technorati button
Reddit button
Myspace button
Linkedin button
Webonews button
Delicious button
Digg button
Flickr button
Stumbleupon button
Newsvine button

Category: Announcements

Fix for FALSE positive memory leak report VS 2015 Update 1

By , December 18, 2015 12:39 pm

We’ve just released a V6.54 of C++ Memory Validator.

This contains a bug fix for FALSE positive memory leak reports when working with Release mode builds of programs built using Visual Studio 2015 Update 1.

Existing customers with valid software maintenance have been emailed about this release. The download is available from the customer login and also from the Software Updates menu in the software.


An End to Unwanted UAC prompts

By , May 25, 2014 7:29 am

We have just updated all of our software tools so that they no longer require administrator privileges to run. No more unwanted User Account Control prompts!

I’m going to explain why we used to require administrator privileges, why we’ve removed that requirement and what impacts that has for you the user of the software.

The past: Our software tools up until 24 May 2014


If you’ve ever used our tools on Windows Vista, Windows 7 or Windows 8 you’ll know that our tools required Administrator privileges to run.

Because of this each time you start the software you are faced with a User Account Control dialog. There is a pause, the screen darkens and then the User Account Control dialog is displayed. You can’t do anything other than interact with this dialog. It’s a “Yes I want to run this. No I don’t want to run this.” deal. But of course you want to run this software, you just started it. Hal really should open the pod bay doors.

This gets even more frustrating if you’ve used our command line interface to automate your testing or if you need the software under test to run without administrator privileges.


The ideal scenario would be for the software to run without requiring administrator privileges, just like most applications on your computer. This would improve the usability of the software, make automated testing smoother and just be better all around.

Reasons for change

When our tools require administrator rights to run there are multiple consequences of that requirement:


  1. A User Account Control dialog is displayed, interrupting the user’s flow.
  2. Automated tests require someone present to approve each tests’s run because a User Account Control dialog is displayed. This either partially or completely defeats the purpose of automating the tests.
  3. The software under test is now run with Administrator privileges. For most applications that isn’t an issue but for some applications this is not the correct privilege level for that application to run at.

The first issue isn’t ideal and adds frustration to the user’s life.

The second issue is horrible.

The third issue is a deal breaker for the few people that must test their application’s at a specific privilege level.

As you can see we had to change this state of affairs.

Working without Administrator Privileges

When running the software without administrator privileges the only thing you’ll notice is no administrator privileges. You can launch and monitor applications without administrator privileges. You can also monitor services that are linked to the NT Service API associated with the tool without administrator privileges. Only the Inject into Application and Wait For Application functionality (C++ tools only) prompt you for administrator privileges. Other than that the software works the same as usual.


If you run the software without administrator privileges the software will communicate with SVLAdminServiceX86 or SVLAdminServiceX64 as appropriate. The service will do the work required.

The C++ tools now work with desktop application, services running on LocalSystem account and services running on LocalService account.


You can still right click the software and run the software with administrator privileges. If you choose this the software will behave exactly as it did in the previous release, it will do all the actions itself and not ask the SVL Admin Service to do the work.

If you want to Inject into a running process or Wait for an application to start we can still do that with the C++ tools but you will need to run with administrator privileges to do that. This is principally because CreateRemoteThread from a service doesn’t work when the target application is not running in the same Windows session. This is a Windows security improvement. Until we can provide a workaround for this these two activities require administrator privileges. The software will automatically prompt you for this process elevation.

Similarly if you launch an application using CreateProcess (the recommended method) you don’t need administrator privileges. But if you choose any of the other options you will be prompted for administrator privileges.

Why did we require administrator privileges?

Our software tools are dynamic analysis tools that analyse the behaviour of software at runtime. As such our tools use a variety of techniques to invade the user space of the software under test and to communicate the collected data back to the user interface. If the software is a desktop application then different security environments are in force compared to if the software is a service. When dealing with a service such as Internet Information Server then you are dealing with a very locked down process. Some of these processes are very hard to interact with. You may be able to inject into the process but then not communicate with the user interface.

To cope with this early versions of our software simply used global shared memory (prefix the shared memory name with \Global) and ran with appropriate debug security privileges. This worked really well. Then came Vista with the new security regime. I’m sorry to say that our initial response was lazy. We simply put admin privileges on everything as a temporary workaround until we could get around to fixing things so they’d work without admin privileges.

So what happened? We got side tracked. We spent a lot of time focussing on other things, supporting different operating systems, different Visual Studio, porting the software to 64 bit, floating licences, improving the UX of tools like C++ Coverage Validator. And because we were at the time developing on Windows XP x64 we didn’t feel the pain of using the new security regime all the time. We’d use Windows 7 for our email machines, personal laptops and for testing but not for daily development.

Why were we using Windows XP x64? The answer is simple. The compressed start menu on Windows 7 is harder to use than the flyout menu on Windows XP. The search functionality on Windows XP is so much easier to use than that built into Windows 7, especially if you are searching for words inside a document (think Visual Studio project, manifest, source code, etc). Yes I know Windows 7 search has great power built into it, but it’s slow, hard to use as it’s crammed into one tiny window and in my experience often doesn’t work. Whereas the Windows XP search experience is simple, easy, reliable and fast (three fields, file name, content to search for, where to search). Sadly Microsoft has made search on Windows 8 even worse (right click on a search result and if you open the location you lose the search results – how is that useful?). And of course the start menu has gone.

Anyway, as the end date for Windows XP support, April 8th, loomed we started getting queries about our software that we’d never fielded before. Most were related to the User Account Control issues already described. People who had been using Windows XP and Windows XP x64 for development were abandoning ship, moving to Windows 7 or Windows 8. By the time we got to the start of March I knew we had to drop everything we were doing, annoy some of our existing customers by putting certain work on hold, and make our software run without administrator privileges. No User Account Dialogs!

Usually we issue one or two software releases per week. Or maybe one every two weeks. Our last software release was March 19th, over 10 weeks ago. This has been the longest break between software releases we’ve ever had. The scope of the work has been huge. We’ve had to write a service that the software talks to to do anything that would normally require administrator privileges. Then we had to identify every area that was impacted by the change in privilege levels. This meant some areas of the software had to be completely re-written. For example our Registry handling software now also has to be able to write to files and memory so that we can pass that data to the service so that the service can populate certains parts of the Registry on behalf of the software tool. Another area that has changed is shared memory. You can no longer just prefix everything with \Global and expect it to work. As such shared memory handling has had to change. This is particularly important if you are working with services. Copying files to certain locations is no longer possible. Writing files to certain locations is no longer possible. All these things we’ve had to address. We’ve had to update the installers to correctly install the service (and uninstall it first if we’re replacing it with an updated version). We’ve had to test on Windows XP, Windows x64 (to ensure our XP customers still get the experience they expect) and on Windows 7 and Windows 7 x64, Windows 8 to ensure everything works correctly. The different security handling for services between XP and Windows 7/8 causes some interesting problems to be worked around. We’ve tested everything to bits.

And along the way we’ve re-factored some of our software and also exposed and fixed some low level bugs in our hooking software (some of which are a side effect of recent optimisations in the way Microsoft build their operating system DLLs). Error reporting on the Diagnostic tab has improved.

Weren’t we dog-fooding?

You might think we weren’t dog-fooding. That is, using our own software to test our software. Yes, we do use our own tools.

But we were not using our tools in an environment that would cause these issues to be apparent to us. We had chosen to eat at our favourite restaurant rather than at the best restaurant in town. Having just spent two weeks on a cruise ship this analogy is sound, we quickly concluded that we preferred the Bistro over the fancy restaurant.

In fact we had deliberately chosen Windows XP x64 because we found it easier to use for the reasons already stated. In hindsight, although this was a good choice for ease of development it was a poor choice from the point of view of experiencing what the bleeding edge of our customers use.

Our new development environment

Our current development environment is Windows 7 but we’ll be moving to Windows 8 as soon as the new machines arrive. For Windows 8 we’ll be adding the Stardock Start8 Start menu. We’ve also written some search tools that although crude, allow us to search files more easily than using Windows 8 built in search functionality. We’re writing more tools to make our development work easier, even as Microsoft’s own UX efforts make what we want to do harder.


The move from administrator privileges required has been a time consuming, challenging experience. We’ve learned a lot along the way and had to change how our software works. However the result is that you, our customers, the users of our software now have an easier time using the software. I hope you agree the effort was worth it.


64 bit C++ software tool Beta Tests are complete.

By , January 9, 2014 1:33 pm

We recently closed the beta tests for the 64 bit versions of C++ Coverage Validator, C++ Memory Validator, C++ Performance Validator and C++ Thread Validator.

We launched the software on 2nd January 2014. A soft launch, no fanfare, no publicity. We just wanted to make the software available and then contact all the beta testers so that we could honour our commitments made at the start of the beta test.

Those commitments were to provide a free single user licence to any beta tester that provided feedback, usage reports, bugs reports, etc about the software. This doesn’t include anyone that couldn’t install the software because they used the wrong licence key!

We’ve written a special app here that we can use to identify all email from beta test participants and allow us to evaluate that email for beta test feedback criteria. It’s saved us a ton of time and drudge work even though writing this extension to the licence manager software took a few days. It was interesting using the tool and seeing who provided feedback and how much.

We’ve just sent out the licence keys and download instructions to all those beta testers that were kind enough to take the time to provide feedback, bug reports etc. to us. A few people went the extra mile. These people bombarded us with email containing huge bugs, trivial items and everything in between. Two of them, we were on the verge of flying out to their offices when we found some useful software that allowed to us to remotely debug their software. Special mentions go to:

Bengt Gunne (
Ciro Ettorre (
Kevin Ernst (

We’re very grateful for everyone taking part in the beta test. Thank you very much.

Why didn’t I get a free licence?

If you didn’t receive a free licence and you think you did provide feedback, please contact us. It’s always possible that a few people slipped through our process of identifying people.

Dang! I knew I should’ve provided feedback

If you didn’t provide us with any feedback, check your inbox. You’ll find a 50% off coupon for the tool that you tested.


Problems with slow shutdown, slow install

By , December 7, 2012 11:05 am

There is a problem with recent versions of our software released prior to 5 December 2012.

Problem description

The problem is that some people will experience a delay when the software tool shuts down. You may think the software has hung. It hasn’t, if you wait it will shutdown. A similar problem may happen when you go to install the latest release from 5 December 2012 – this time the install happens OK but when you enter the license details the dialog takes a very long time to close. You may think the software has hung. It hasn’t, if you wait it will close.

Both of these problems are caused by a bug which causes two registry entries to grow in size. The fix is to install the new versions released on 5 December 2012 (or any subsequent version), or to do a registry hack.

Registry Hack

To fix the problem by editing the registry start the registry editor regedit.exe.

Navigate to HKEY_CURRENT_USER\Software\SoftwareVerification\Product-Name

For example HKEY_CURRENT_USER\Software\SoftwareVerification\C++MemoryValidator

Now delete all subkeys that start with “uiGlobalHook”.

This change will stop the problem for a while. However at some point these registry entries will grow to a point where they slow the software down. When that happens you will need to repeat this process. We recommend that you update to the most recent version of the software. If you have purchased our software you will have been sent a link to the latest version of the software. Please check your inbox for 5 December 2012.

Please accept our apologies for allowing this bug to get into released software.


Important changes to how we bring you software updates

By , November 17, 2011 11:36 pm

In this blog post I’m going to tell you about some important changes that will be happening with respect to how we provide software updates to the people that use our software tools.

Software Update Email Notification

At present customers that have purchased our software tools receive software software update notifications via email. In addition participants in our beta software programmes also receive software update notifications via email.

Software updates are released whenever we have bug fixes we think should be released or whenever we have new functionality we wish to make public. This can result in releases on a day by day basis or no releases for weeks at a time. We never hold bug fixes or releases back for service packs. We always try to get them to our users as rapidly as possible.

For some people the constant email notifications are too much and they ask not to be notified any more. For other people they welcome the fact that we supply bug fixes and updates on a regular basis. Clearly there is no one-size-fits-all solution to email notification.

Another problem is bounced email. Sometimes valid email addresses bounce. Do we unsubscribe this email automatically or do we try it again the next time (because quite often these email addresses spring back into life)? Either way, over time we end up building a large list of dead email addresses.

Automatic Software Updates

Starting next week, we’re going to release new software versions which are capable of self-updating. These new releases will check for the availability of a new release, prompt you to ask if you are interested in the new release and if you are, login to our server, download the software, install the software and new license keys and then restart the software.

Software Maintenance

In addition to the ability to keep the software up to date it will also be possible to update the software maintenance from within the software update package. As such you will always know when the software updates are about to expire and when you need to renew your software maintenance.

When you purchase your software tools from us we always provide you with at least one year of software updates as part of the purchase. Up until now we have never enforced that. We have provided software updates for periods much longer than one year for some customers. With this new functionality we will continue to provide one year of software updates but we will now enforce that period from January 15 2012.

As such if you’ve purchased since a year of January 15 2011 your software maintenance will continue for a year from the purchase date. If you purchased before January 15 2011 your software maintenance will need renewing on January 15 2012. Two examples should demonstrate this:

Example 1:
Purchase date: 2009-10-31
Maintenance expiry date: 2012-01-15
Example 2:
Purchase date: 2011-08-31
Maintenance expiry date: 2012-08-31

The reason for this change is because there is a cost to us to provide the software updates and we can no longer provide these for free. We always intended to charge for software updates but for various reasons never got around to do it. Thus some of you, our customers, have had a very extended period of software updates without a maintenance fee.

As of the next software update, the only way to receive updates will be via the self-updating software updater. We will not be sending out software update emails after the next update.

For beta test participants, the maintenance expiry date will be adjusted as the beta test progresses. There will be no maintenance fee for beta test participants.

How does the self-updater work?

Software update menu

We’ve added two menu items to the Tools menu in all full product and beta versions of the tools. These options allow you to edit the schedule when the tool will check for software updates and also to force a check for software updates.

In order to accommodate different working styles we’ve provided a variety of different update options so that the disruption to a given software developer’s workflow is minimized.

The software update schedule can be set to check for updates every day, every week, monthly or not at all. This check is performed when the software is first started on a given day. This means that people running multiple day tests (say doing regression testing on a large test suite) will not be interrupted by a software update prompt. We think that given how the tools are used they are typically not kept open for extended lengths of time and will typically be started when needed. As such checking once during startup is a suitable event to check for software updates.

The date of the most recent check is displayed on the schedule dialog.

If you wish to force a software update just choose “Check for software updates…” on the menu.

Software update schedule

When a software update is available the user will be prompted with a confirmation dialog providing the choices to download and install the software, to ignore the download until later or to ignore the download completely.

Options for editing the update schedule or purchasing additional software maintenance are also provided.

Software update yes, no, skip selection

If the user chooses to ignore the download they will be prompted about this download (or a subsequent download) at the next software update interval (the next day, next week, or next month).

If the user chooses to skip this download they will only be prompted to download if a new software version becomes available for download. Should the user change their mind they can always choose to force a check for updates using the menu “Check for software updates…”.

If the user chooses to download and install the software, the tool contacts the server and logs in using the user supplied credentials (provided when you purchase the software or join a beta test). If no login credentials have been supplied the user is prompted for the login credentials.

Software update login details

Once logged into the server the software downloads the software with progress shown on a download progress dialog.

Software update login details

When the software is downloaded successfully the tool will close and the software will be installed. Finally the tool is restarted so that work can continue with the tool.

Expired Software Maintenance

Software maintenance has an expiry date. The software continues to work but the ability to receive software updates ceases at this date. When software maintenance has expired a software maintenance expiry dialog is displayed. The user of the software has the opportunity to purchase additional software maintenance to continue receiving software updates.

Software update expired

Software Maintenance Pricing

Given that I’ve discussed purchasing maintenance I should just briefly cover maintenance pricing otherwise you may decide to spend time scouring the website for maintenance pricing. To save you that effort here is the brief summary.

The software maintenance fee is 25% of the listed purchase price on our website. This excludes any special offer pricing. This means that if you received a volume discount when purchasing the software the maintenance fee automatically includes the same volume discount pricing.

The easiest way to purchase this will be by clicking the appropriate purchase buttons on the software. They will log you into the website, choose the correct product and correct number of users and price etc, all automatically. And when the purchase is complete the correct account and expiry details will be updated. Much easier than trying to do this any other way.


This new method of providing software updates will be less intrusive (much less email) and more customizable (you can choose the update schedule). We hope you will find this a useful improvement to our current software update schedule.

Be sure to look out for the next software update email from us. You’ll need to download that software update to get the version of the software that can self-update as described in this article. If you wish to continue receiving software updates you will need the next version of our software tools.

We welcome your thoughts and comments on these changes.


Code signing and user hinting

By , December 22, 2009 4:57 pm

We have just released new versions of our software tools that are code signed.

This change will please those of you that are using more recent operating systems that will ask your permission to start an executable that is not signed by a company that you trust. No more warnings for Vista and Windows 7 users!

We have also introduced a new user hinting feature that provides some general guidance on what to do next using unused space on the user interface. This user hinting came about as a result of some usability testing we did during November. We hope you find this useful, if not for yourself, but your colleagues when introduced to the software.


Support for MinGW and QtCreator

By , December 4, 2009 5:01 pm

Everyone uses Visual Studio to write C and C++ software don’t they? Yes! you all chorus. Apart from some guys at the back who like to use gcc and g++. They use MinGW when working on Windows. And they may even use Emacs, or perish the thought, vi!

Up until now we haven’t been able to cater to the needs of gcc and g++ users. We’d get email every month asking when we were going to support MinGW or if we supported QtCreator. It was frustrating admitting we couldn’t support that environment. Even more so as the founders of Software Verification wrote large GIS applications using gcc and g++ back in the early 1990s.

During October we integrated support for MinGW and QtCreator into Coverage Validator, Memory Validator, Performance Validator and Thread Validator. Both COFF and STABS debug formats are supported, which provides some flexibility in how you choose to handle your symbols.

We’ll continue to add support for additional compilers to our tools as long as there is interest from you, the kind people that use our software tools.


What do programmers want for Christmas?

By , November 25, 2008 5:03 pm

T-shirts appears to be the answer. Even better if they come with a natty logo or slogan.

Andy Brice has come up with a wonderful idea of creating some interesting T shirt designs with programming related in-jokes. The profits from the sale of these T-shirts goes to two worthy charities: SightSavers and JairpurFoot. SightSavers is a charity helping to prevent blindness and eyesight problems and Jaipurfoot is a charity helping to provide low cost prosthetics to people in 22 countries.

Head on over to T-Shirts for Programmers to read about Andy’s motivations for the T-shirts. His blog also has lots of interesting articles about the independent software business.

Full disclosure: Andy Brice is a customer of ours. Andy uses Coverage Validator to improve the testing of his popular Table Planning software. Andy has recently written a review of Coverage Validator V3.


Tab controls and tree/grid controls – why change them?

By , May 12, 2008 1:25 pm

In this post I’m going to describe some of the changes we’ve been making to the user interface of our software tools and also why this change has become necessary.

Over the past few months we have made a variety of wide ranging changes to the GUI of our software tools. Earlier versions of our tools used some 3rd party tab controls and some 3rd party grid controls that could also function as tree controls. These controls were very useful and enabled us rapidly create the user interfaces we needed.

However, over time we found a few special cases where we needed something more powerful. This resulted in the virtual tree/grid control we now use to display the potentially very large datasets the tools can collect. We haven’t found any 3rd party tree or grid that can handle the volume of data the virtual tree/grid control can handle.

The result of this is that there were several competing styles of tree/grid control, some with white backgrounds, others with darker backgrounds, all with different visual styles for the way the grid was draw and the way it behaved in response to user input. This, while effective, was less than ideal.

At the same time, we have customers and potential customers asking us when our software will run on 64 bit Windows, or when it will run on Linux and Mac OS / X. We’ve been looking at the Linux and Mac OS / X issue for some time, evaluating which technology route to go with for the port, writing tools to automate as much of the port as possible (we have over 30 software tools to port if we port every tool) and assessing the “weak points” in our codebase that will cause us trouble.

Some customers having become used to our rapid turnaround of bug fixes have been somewhat surprised at how long we have taken to produce our ports to non-Windows operating systems. The main reason for the delay is that we want to port all the software tools that are appropriate, rather than just port Ruby Performance Validator and Ruby Memory Validator.

Having written the porting tools, we then ran up against our major weak points, consisting of the 3rd party tab control and 3rd part tree/grid controls, used in many, many places throughout our software. Thus, alongside our usual development goals of introducing new functionality and attending to customer issues, 2008 has been spent writing even more tools to aid us with the transition from the 3rd party tab control to a custom tab control and from the 3rd party tree/grid control to the virtual tree/grid control.

Today marks the first day without the 3rd party controls in our software. We still have some work to do before we can let the automated porting tools we’ve written loose on our codebase to product the cross-platform single source codebase we desire. However this is a significant step forward in that process.

Although we are not there yet, I hope this posting has provided some insight to what we are doing to those of you that are interested in this work.

Future postings will cover this topic as we have more to say about porting from a large MFC codebase to Linux and Mac OS / X.


XULRunner Support

By , April 3, 2007 5:08 pm

About a month ago we hadn’t heard of XULRunner. Then the folks at Songbird emailed us asking if our JavaScript tools supported XULRunner.

Its easy to miss a new tool or technology what with all the various development directions people are taking. XULRunner is a platform independent way to write applications using the same technology used to create Firefox and Thunderbird. You use the XPCOM, XUL and JavaScript technologies to create your application. With a bit of magic it then runs on your platform of choice. Songbird are using XULRunner to create a platform independent media player. I guess they know their target market, they are founded by the same people that did Winamp and Yahoo! Music Engine.

Given that we already supported JavaScript for Firefox and Flock support for XULRunner seemed like a natural fit. Ideally it would have worked out of the box, just change a few settings on the UI of our tools and off you go. It didn’t turn out that way, although now we’ve made the appropriate changes, its as trivial as selecting xulrunner.exe instead of firefox.exe when you are choosing the JavaScript runtime.

The first problem we had was that xulrunner.exe doesn’t use the js3250.dll DLL directly, it does it via the xul.dll DLL. As a result the UI and the stub couldn’t find the js3250.dll and thus couldn’t determine the version information we use to choose how to interact with js3250.dll. So we needed to support that.

The second issue was that each js3250.dll we’ve encountered has some internal differences that make line numbers inconsistent unless you use a build against the same header files used for that build. Very annoying, but thats how it is. So we need to know if its Firefox 1.0, 1.5, 2.0, Flock 0.7, or xulrunner to choose the appropriate way to interact with the target. If our tools don’t know they assume you are using the latest and greatest and give you the firefox 2.0 treatment. XULRunner needs the 1.5 treatment not the 2.0 treatment so we had to put in a check for that. Also, the version ids on xulrunner.exe shipped with Songbird are "Personal" and not a version number. Excuse me? Whats up with that? Not very useful information. It should read "1.8" or something similar given that XULRunner is currently at Hopefully someone will fix that.

A third issue was a killer. Songbird triggers a hook that causes a fatal crash. Whoops, how did that get past testing? Same way any other bug does I guess 🙁 Thats life, we are not perfect, so chalk that one up to experience.

We also needed a few XULRunner specific tweaks. For example when you are launching a XULRunner application you are looking for .ini files not .html/.js files.

To sum up, all our JavaScript tools now support XULRunner. This should help all of you using XULRunner to create platform neutral apps using Mozilla technology. If you have any specific issues please let support know at the usual address.


Panorama Theme by Themocracy