Products, the Universe and Everything

The Riverblade Developer's Blog

Beth demonstrating Visual Lint at the ACCU Conference 2008  Anna taking part in a discussion panel at the European Software Conference 2007 

Welcome to our developer's blog. We hope that this forum provides an insight into us, our products and how we develop them. Please feel free to write to us if you have anything to add to any of the posts here.

Current Entries | Archives |


Visual Lint 6.5.4.298 has been released
Tuesday, September 11, 2018

This is a recommended maintenance update for Visual Lint 6.5. The following changes are included:

  • If a "Lint" folder without the hidden attribute exists in a solution/workspace folder Visual Lint will no longer attempt to use it to store analysis results and will create a new ".visuallint" folder instead. This prevents Visual Lint from assuming that a user-created "Lint" folder is one which was created by an earlier (pre-v5.0) version of Visual Lint.
     
  • Fixed a crash which could occur when files were saved in the Eclipse plug-in. The crash seemed to particularly affect plug-in installations running within Texas Instruments Code Composer Studio and configured for per-project analysis with the "Re-analyse saved files using the preferred method" option set.
     
  • The project variables $(CEVER), $(ARCHFAM) and $(_ARCHFAM_) are now automatically defined when analysing Visual Studio 2008 projects for the NetDCU9 (ARMV4I) platform.
     
  • Corrected the "Supported development environments" help topic to reflect the fact that Atmel AVR Studio 5 and Atmel Studio 6.x/7.x are now supported via a dedicated plug-in.
     
  • Updated the PC-lint Plus message database to reflect changes in PC-lint Plus 1.2. Note that the definitions for Clang errors 5905, 5916 and 5922 have been omitted as the PC-lint Plus -dump_messages directive does not reveal either their titles or descriptions.
     

Download Visual Lint 6.5.4.298


Posted by Anna at 13:49 | Get Link

 

Visual Lint 6.5.3.296 has been released
Tuesday, August 14, 2018

This is a recommended maintenance update for Visual Lint 6.5. The following changes are included:

  • Added the ability to override the analysis tool installation folder on a per solution/workspace or project basis [Visual Lint Enterprise and Build Server Editions].
     
  • The analysis tool executable pathname can now be overridden on a per project basis as well as per solution/workspace [Visual Lint Enterprise and Build Server Editions].
     
  • Fixed a minor resizing bug in the Analysis Configuration Dialog.
     
  • Fixed a minor bug in the "Active Analysis Tool" dialog.
     

Download Visual Lint 6.5.3.296


Posted by Anna at 09:57 | Get Link

 

Visual Lint 6.5.2.295 has been released
Thursday, May 24, 2018

This is a recommended maintenance update for Visual Lint 6.5. The following changes are included:

  • Added basic support for Qt Creator projects (.pro/.pro.user files). Note that the implementation does not yet support subprojects or read preprocessor and include folder properties. As such, if the analysis tool you are using requires preprocessor or include folders to be defined (as PC-lint and PC-lint Plus do) for the time being they must be defined manually (e.g. written as -D and -i directives within a PC-lint/PC-lint Plus std.lnt indirect file).
     
  • The "Analysis Tool" Options page now recognises PC-lint Plus installations containing only a 64 bit executable if the "Use a 64 bit version of PC-lint if available" option is set.
     
  • When the PC-lint Plus installation folder is selected in the "Analysis Tool" Options page the PC-lint Plus manual (<installation folder>/doc/manual.pdf) is now correctly configured.
     
  • Added a workaround to the Eclipse plug-in for an issue identified with some Code Composer Studio installations which source plug-in startup and shutdown events in different threads.
     
  • Fixed a crash which affected some machines when the "Analysis Tool" Options page was activated when PC-lint was the active analysis tool.
     
  • Fixed a bug which caused the Visual Studio plug-in to be incorrrectly configured in Visual Studio 2017 v15.7.
     
  • Fixed a bug which could cause the PC-lint/PC-lint Plus environment file to reset to "Defined in std.lnt".
     
  • Updated the "Example PC-lint/PC-lint Plus project.lnt file" help topic and those relating to supported project types.
     

Download Visual Lint 6.5.2.295


Posted by Anna at 11:28 | Get Link

 

ACCU Conference 2018
Friday, April 27, 2018

We had an absolute blast at this year's ACCU Conference, and if you were there we imagine you did too.

For us the highlight had to be the launch of #include <C++>, a new global, inclusive, and diverse community for developers interested in C++.

#include <C++> logo

This is an initiative that has been brewing for a while, and we're very happy to be a part of. Above all else #include <C++> is designed to be a safe place for developers irrespective of their background, ethnicity, gender identity or sexuality. The group runs a Discord server which is moderated to ensure that it remains a safe space and which you are welcome to join.


On the technical front, one unexpected highlight of the conference was Benjamin Missel's wonderful short talk on writing a C compiler for a BBC Micro, during which he demonstrated SSHing into a BBC Model B through the serial port!

Most conference sessions were recorded so even if you weren't there you can still watch them.

See you at ACCU 2019!


Posted by Anna at 12:25 | Get Link

 

ResOrg 2.0.7.27 has been released

ResOrg 2.0.7.27 has just been released. This is a maintenance update for ResOrg 2.0, and is compatible with all ResOrg 2.0 licence keys.

The following changes are included:

  • Fixed a bug in the Symbols Display which could cause some "OK" symbols to be incorrectly shown in the "Problem Symbols Only" view.
     
  • Corrected the upper range limit for control symbols from 28671 (0x6FFF) to 57343 (0xDFFF).
     
  • ResOrg binaries are now dual signed with both SHA1 and SHA256.
     
  • Added support for Visual Studio 2017.
     
  • Corrected the File Save Dialog filters used by the ResOrgApp "File | Export" command.
     
  • The ResOrgApp "File | Export", "File | Save", "File | Save As" and "File | Properties" commands (which apply only to symbol file views) are now disabled when the active view is a report.
     
  • Fixed a crash in the Symbol File Properties Dialog.
     
  • Fixed a typo on the Symbol File "Next Values" page.
     
  • Various minor improvements to the installer.
     

Download ResOrg 2.0.7.27


Posted by Anna at 11:31 | Get Link

 

Visual Lint 6.5.1.294 has been released
Tuesday, March 27, 2018

Visual Lint 6.5.1.294 has just been released. This is a maintenance update for Visual Lint 6.5, and is compatible with all Visual Lint 6.0 and 6.5 licence keys.

The following changes are included:

  • Built-in compiler preprocessor symbols are now automatically included in the analysis configuration for Atmel Studio projects using ARM toolchains where possible.
     
  • Fixed a bug which caused a "project changed" event to be erroneously sourced if an external project file located in the same folder as a loaded project was changed.
     
  • The PC-lint raw analysis results parser will now raise a fatal error if a PC-lint Plus License Error is detected.
     
  • Fixed a bug in the "Analysis Tool" Options page which affected browsing for an analysis tool installation folder.
     
  • Modified a handful of prompts to refer to "PC-lint or PC-lint Plus" rather than just "PC-lint".
     

Download Visual Lint 6.5.1.294


Posted by Anna at 11:03 | Get Link

 

Visual Lint 6.5 has been released
Wednesday, March 7, 2018

The first public build of Visual Lint 6.5 has just been uploaded to our website.

Visual Lint 6.5 is the second Visual Lint 6.x release, superseding Visual Lint 6.0. As a minor update, it will also accept existing per-user Visual Lint 6.0 licences; Visual Lint 1.x, 2.x, 3.x, 4.x and 5.x per-user licences must however be upgraded to work with this version.

Full details of the changes in this version are as follows:

 

Host Environments:
  • Removed the (deprecated since Visual Lint 5.0) ability of the Visual Studio plug-in to load within Microsoft Visual Studio 6.0 and eMbedded Visual C++ 4.0. Projects for these environments can of course still be analysed in the standalone VisualLintGui and VisualLintConsole applications.
     
Analysis Tools:
  • Modifications to support PC-lint Plus PCH analysis, which creates object files (.lpph or .lpch) in the project working folder rather than (as was the case with PC-lint 9.0) in the folder containing the PCH header file. This should affect only projects where the PCH header file is contained in a different folder from the project file.
     
  • PC-lint project indirect (project.lnt) files are now automatically recreated if a different version of the analysis tool is in use.
     
Installation:
  • The installer now prompts for affected applications (Visual Studio, Atmel Studio, AVR Studio, Eclipse, VisualLintConsole and VisualLintGui) to be closed before installation can proceed.
     
  • The installer now installs VSIX extensions to Visual Studio 2017 and Atmel [AVR] Studio silently.
     
  • Revised the order of registration of the Visual Studio plug-in with each version of Visual Studio so that the newest versions are now registered first.
     
  • Uninstallation no longer incorrectly runs "Configuring Visual Studio..." steps if the VS plug-in is not selected for installation.
     
  • The "Installing Visual Lint" progress bar is now updated while Visual Studio, Atmel Studio and Eclipse installations are being registered.
     
  • Improved the logging of VSIX extension installation/uninstallation.
     
User Interface:
  • The Analysis Status View now supports text filters of the form "Project/File".
     
  • Added a new Window List Dialog to VisualLintGui to display details of the open MDI child windows, and allow selected windows to be activated, saved or closed as a group.
     
  • Widened the About Box slightly.
     
Reports:
  • Replaced the table sort code in generated HTML reports with a simpler, more robust implementation from https://www.kryogenix.org/code/browser/sorttable/.
     
  • Replaced the Teechart generated Issue Count by Category/ID charts in HTML reports with Javascript ones.
     
Bug Fixes:

 

Download Visual Lint 6.5.0.293


Posted by Anna at 12:37 | Get Link

 

Visual Lint 6.0.8.291 has been released
Thursday, January 18, 2018

Visual Lint 6.0.8.291 has just been released. This is a maintenance update for Visual Lint 6.0, and includes the following changes:

  • Fixed a bug which could cause Visual C++ 2010-2017 project (.vcxproj) files which have configuration names containing brackets to be loaded incorrectly.
     
  • Fixed a race condition which could cause errors or a crash while loading MSBuild projects.
     
  • Added modified versions of several PC-lint 9.0 indirect files which are not supplied with PC-lint Plus 1.0 to the installer.
     
  • Added additional PC-lint Plus suppression directives to the indirect file lib-rb-win32.lnt supplied within the installer.
     

Download Visual Lint 6.0.8.291


Posted by Anna at 13:44 | Get Link

 

Happy New Year and all that!
Wednesday, January 17, 2018

So, here we are in another year, and with two weeks under our best so far things are starting to get done.

Happy New Year! Have a blue fish for Blue Monday

Although the post-Christmas period in our part of the world tends to be a bit of a gloomy experience (witness the concept of Blue Monday), we like to look at the hopeful stuff which is always there when you care to look for it.

For us, that means a few things.

We start this year in the knowledge that Gimpel has now released PC-lint Plus (yay!), which finally puts to bed the issues PC-lint 9.0 had with modern C++ code - and variadic templates in particular. For the unaware, PC-lint Plus uses Clang as a front-end, so it's absolutely futureproof with regard to C++ 17, C++ 20 etc.! We're spending a lot of our time developing library suppression files for the new version, so if you're running into issues with unexpected errors etc. let us know and we'll be happy to help.

The pricing and licencing model for PC-lint Plus is different from that for PC-lint 9.0, so that may take some getting used to but we have high hopes. Evaluation licences are available on request from Gimpel. They have also shared some of their future plans for the product with us, and although we're under NDA (and can't therefore share details of them yet) I can tell you that they are rather exciting.

Then there is the ACCU Conference in Bristol on 10th-14th April, and the Business of Software Conference Europe on 21st-22nd May (if you're in the USA, Business of Software USA is on 1st-3rd October in Boston, MA). We'll be at both ACCU and BoS Europe - in the former case with our full demo rig.

Finally, we're getting Visual Lint 6.5 ready for public release (more on that in the next mailshot) so internally we've been busy branching code, building, testing etc.

Visual Lint 6.5 will be an incrememental (and free!) upgrade to Visual Lint 6.0, but we think you'll like it.


Posted by Anna at 15:11 | Get Link

 

Visual Lint 6.0.7.289 has been released
Thursday, December 7, 2017

Visual Lint 6.0.7.289 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Fixed a bug in the "Analysis Tool" Options page which affected whether the "Use VS2012/VS2010 system headers for compatibility with PC-lint 9.00L or earlier" option was shown.
     
  • Fixed a bug in the installer which could cause a malformed VsixInstaller command line to be executed when attempting to install the Visual Studio plug-in Visual Studio 2017 and Atmel Studio.
     
  • Fixed a bug in the Visual Studio 2017 plug-in (VisualLintPlugIn_vs2017.vsix) which could cause it to fail to install with a manifest.json error.
     
  • Fixed an intermittent crash when shutting down background analysis, reporting or control threads.
     
  • Projects are now loaded at the same thread priority as the task loading the parent solution. This should make the UI more responsive during the loading of large solutions.
     
  • Fixed a bug which was preventing solution load tasks from being aborted as quickly as they could be (e.g. when the active configuration is changed).
     
  • Added additional PC-lint/PC-lint Plus suppression directives to the indirect file lib-rb-win32.lnt supplied within the installer.
     
  • The RB_PLATFORM environment variable (which allows compiler indirect files to conditionally configure for specific platforms) is now defined within generated PC-lint and PC-lint Plus command lines for platforms other than Win32 and x86.
     

Download Visual Lint 6.0.7.289


Posted by Anna at 11:44 | Get Link

 

Visual Lint 6.0.6.287 has been released
Friday, October 13, 2017

Visual Lint 6.0.6.287 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Added PC-lint Plus specific compiler indirect files co-rb-vs6.lnt (Microsoft Visual Studio 6.0), co-rb-vs2002.lnt (Microsoft Visual Studio .NET 2002), co-rb-vs2003.lnt (Microsoft Visual Studio .NET 2003) and co-rb-vs2005.lnt (Microsoft Visual Studio 2005) to the installer.
     
  • Modified the installer to correctly recognise Microsoft Visual Studio 2017 version 15.3 installations.
     
  • Fixed a bug in the installer which affected the installation of the Atmel Studio plug-in into AVR Studio 5.x.
     
  • Added PC-lint Plus specific warning 550 suppression directives for the UNREFERENCED_PARAMETER, DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE macros.

    These suppressions are implemented in a new lib-rb-win32.h header file referenced by the existing lib-rb-win32.lnt indirect file supplied within the installer.
     

Download Visual Lint 6.0.6.287


Posted by Anna at 10:54 | Get Link

 

Visual Lint 6.0.5.285 has been released
Friday, September 22, 2017

Visual Lint 6.0.5.285 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Added PC-lint Plus specific compiler indirect files co-rb-vs2008.lnt and co-rb-vs2010.lnt.
     
  • co-rb-vs2013.lnt and co-rb-vs2015.lnt now undefine the preprocessor symbols _CPPRTTI, _CPPUNWIND and _NATIVE_WCHAR_T_DEFINED which are hardcoded in the Gimpel supplied compiler indirect files. These definitions should not be hardcoded as Visual Lint will automatically define these symbols where required by the project configuration.
     
  • Added additional suppression directives to the PC-lint Plus indirect file rb-win32-pclint10.lnt.
     
  • Fixed a bug in the expansion of project variables within the "Command Line" page in the Analysis Configuration Dialog.
     
  • If a category with no issues (e.g. "Internal Errors" in PC-lint Plus) is selected in the Message Lookup Display the "Title" and "Description" fields will now be correctly cleared.
     
  • When multiple views of a file is opened for editing in VisualLintGui, the contents of the views are now correctly synchronised.
     
  • VisualLintGui now captions the MDI child window tabs correctly when there are multiple instances of the same file open.
     
  • Fixed a bug in VisualLintGui which prevented MDI windows from being correctly configured if more than one view of a particular file was open.
     
  • Added a "Window | Close" command to VisualLintGui. The Ctrl+W accelerator and MDI tab "Close" command are now mapped to this command rather than "File | Close".
     
  • Fixed a bug in the VisualLintGui "Window | Close All" and "Window | Close All Except" commands which manifested when more than one view of a particular file was open.
     
  • The VisualLintGui "Window | New" command is now disabled if the active MDI child window is a web browser window.
     
  • Updated the PC-lint Plus message database to reflect changes in PC-lint Plus RC2.
     

Download Visual Lint 6.0.5.285


Posted by Anna at 11:43 | Get Link

 

The public release of PC-lint Plus is imminent!
Wednesday, September 20, 2017

The PC-lint Plus beta test phase is now complete, with three release candidates having been issued since the beginning of September by Gimpel Software (the PC-lint Plus vendor).

The following statement has just appeared on the Gimpel website:

PC-lint Plus Release is Imminent

Our testing of PC-lint Plus is nearing completion and we expect a formal release of the product during the 4th quarter of 2017. Unlike PC-lint and FlexeLint, licensing of PC-lint Plus will be based on a Team License. To get a quote, please send an email to sales@gimpel.com with your company information, and a brief description of the Team, including the name of your Team and the number of developers (including consultants) that will be working on the source code that PC-lint Plus will be analyzing.

What is PC-lint Plus?

PC-lint Plus is a rewrite of PC-lint from the ground up. It combines the clang framework with Gimpel Software's 30+ years of static analysis experience to provide a product that supports the latest C and C++ standards and implements the leading edge analysis technology that Gimpel Software is known for. While PC-lint Plus is a new offering from Gimpel Software, it is largely backward compatible with PC-lint /FlexeLint. In particular, most of the same options and messages are supported by PC-lint Plus, indirect files work the same way, and flagship features such as Value Tracking, User-defined Function Semantics, and Strong Types are all available and many features have been significantly enhanced.

Read More

While we are waiting for full details we are continuing our testing of the release candidates and (in particular) refining the PC-lint Plus compiler configuration and suppression files installed with Visual Lint.

As with PC-lint 9.0, in due course we aim to include a full set of indirect files in the Visual Lint installer - including compiler indirect files for all versions of Visual Studio back to Visual C++ 6.0 - regardless of whether Gimpel provide them (so far PC-lint Plus only includes compiler indirect files for Microsoft Visual Studio 2012, 2013 and 2015). We have already authored compiler indirect files for Visual Studio 2008 and 2010, and others will follow.

If you already have a PC-lint Plus RC installation, Visual Lint 6.0 can already analyse projects using both the 32 bit (pclp32.exe) and 64 bit (pclp64.exe) versions of PC-lint Plus and already includes a number of other features (for example multicore per-project analysis) to specifically support PC-lint Plus installations. If you have any specific queries about PC-lint Plus support, just let us know.


Posted by Anna at 12:31 | Get Link

 

Visual Lint 6.0.4.281 has been released
Tuesday, July 25, 2017

Visual Lint 6.0.4.281 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Microsoft Visual C++ Express Edition 2010/2012 system headers can now be used as a source of system headers for PC-lint 8.0/9.0 analysis of VS2013/15/17 projects.
     
  • Fixed a potential crash in VisualLintGui if a corrupt window layout is restored on startup.
     
  • Fixed a bug in the parsing of Visual C++ 2010-2017 project (.vcxproj) files in which the configurations are defined in an external property (.props) file located via a user macro.
     
  • Fixed a bug in the parsing of Green Hills projects which affected whether some subprojects were read correctly.
     
  • Various changes to the installer:
     
    1. The installer now prompts for affected applications (Visual Studio, Atmel Studio, AVR Studio, Eclipse, VisualLintConsole and VisualLintGui) to be closed before installation can proceed.
       
    2. The installer now installs VSIX extensions to Visual Studio 2017 and Atmel [AVR] Studio silently.
       
    3. Revised the order of registration of the Visual Studio plug-in with each version of Visual Studio so that the newest versions are now registered first.
       
    4. Uninstallation no longer incorrectly runs "Configuring Visual Studio..." steps if the VS plug-in is not selected for installation.
       
    5. The "Installing Visual Lint" progress bar is now updated while Visual Studio, Atmel Studio and Eclipse installations are being registered.
       
    6. Improved the logging of VSIX extension installation/uninstallation.
       

Download Visual Lint 6.0.4.281


Posted by Anna at 10:49 | Get Link

 

Visual Lint 6.0.3.278 has been released
Thursday, June 1, 2017

Visual Lint 6.0.3.278 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Renamed the Visual Studio 2017 VSIX extension to VisualLintPlugIn_vs2017.vsix.
     
  • Added a VSIX extension for Atmel AVR Studio 5.x and Atmel Studio 6.x/7.x as an optional component in the installer.
     
  • Added support for the analysis of Atmel AVR Studio 5.1 projects.
     
  • The "Analysis" Options page now allows more than 16 analysis threads to be selected on systems which have more than 16 logical cores.
     
  • Fixed a bug which could cause the displays to be incorrectly configured when the Visual Studio plug-in is started within Visual Studio 2015 or 2017.
     
  • Fixed a bug in the Analysis Statistics Display which affected the "Show/Hide all issues with this ID" context menu command.
     
  • Fixed a bug in the Display Filter Dialog which affected the "Check selected Items" context menu command.
     
  • Corrected the toolchain used for Atmel Studio 6.x projects from "AVR6.0" to "AS6.0". Note that this is a breaking change (but fortunately a minor one).
     

Download Visual Lint 6.0.3.278


Posted by Anna at 12:03 | Get Link

 

Visual Lint 6.0.2.276 has been released
Thursday, April 13, 2017

Visual Lint 6.0.2.276 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Migrated the Visual Studio 2017 VSIX extension to VSIX v3 to prevent Visual Studio 2017 from issuing a "This extension is not compatible with Visual Studio 2017" warning when the VSIX extension is installed.
     
  • Eclipse/CDT path variables of the form ${workspace_loc://include} are now internally aliased to ${project_loc}/include while expanding project include folder paths. This prevents issues expanding folder locations for projects which are physically located outside of the workspace.
     
  • The Analysis Status and Projects Display context menu "Troubleshooting | Save Preprocessed File As..." commands no longer erroneously include a reference to a PC-lint environment indirect file on the generated command line. This prevents PC-lint Plus from issuing an erroneous error 900 message at the end of the preprocessed file, which could cause an analysis error when the file is subsequently analysed.
     
  • Fixed a bug which could cause an out of date issue count to be displayed for a file while it was being analysed.
     
  • Added a "Browse" button to the "Location" combo box in the VisualLintGui "Find in Files" Dialog.
     
  • Updated the help to make it clear that VisualLintConsole and VisualLintGui can both analyse standalone projects as well as complete solutions/workspaces.
     

Download Visual Lint 6.0.2.276


Posted by Anna at 11:26 | Get Link

 

Visual Lint 6.0.1.275 has been released
Thursday, March 2, 2017

Visual Lint 6.0.1.275 is now available. This is a recommended maintenance update for Visual Lint 6.0, and includes the following changes:

  • Fixed a bug which could potentially prevent Visual Studio 2013/2015 projects from being analysed with PC-lint 8.0/9.0 using compatible system headers from earlier versions of Visual Studio.
     
  • Fixed a bug which caused saved display filter settings to be lost when the product edition was set to one which does not support the global display filter. This ensures that the previous filter settings will be preserved if the display filter subsequently becomes available once again.
     
  • Fixed a minor resizing bug in the "Send Feedback" Dialog.
     
  • The "View Analysis Results" context menu command in the Analysis Status Display now correctly echoes the raw analysis results to the Output Window (Visual Studio) or Console (Eclipse) if the "Echo raw analysis results to the Output/Console Window" option is active.
     
  • The "Echo raw analysis results to the Output/Console Window" option in the "Display" Options page is now disabled in hosts which do not support it. In Visual Studio, turning on the option also no longer requires Visual Studio to be restarted to apply changes.
     
  • CppCheck analysis issues of the form "cppcheck: error: unrecognized command line option: "-foo"." are now correctly recognised as Fatal Errors.
     
  • Added the "Send Feedback" command to the main toolbar in VisualLintGui and the Visual Studio and Eclipse plug-ins.
     
  • When the analysis tool installation folder is changed in the "Analysis Tool" Options page or "Select Analysis Tool Installation Folder" Configuration Wizard page, the paths of the associated PC-lint indirect and help files will now be updated automatically where possible.
     
  • Converted the "Raw issue ID filter" control in the Global Display Filter Dialog to a combo box.
     
  • The initial folder paths in various file/folder dialogs are now set correctly.
     
  • If the Visual Studio plug-in has been installed into Visual Studio 2017, installing a newer version will now first attempt to remove the previous version of the extension prior to installing the new version.
     
  • The installer now copies the PC-lint Plus indirect file rb-win32-pclint10.lnt to the correct location.
     
  • Added additional suppression directives to some of the Riverblade authored PC-lint Plus indirect files.
     
  • Minor corrections to the comments within some of the Riverblade authored PC-lint Plus indirect files.
     
  • Added a help topic for the "Send Feedback" Dialog.
     

Download Visual Lint 6.0.1.275


Posted by Anna at 09:37 | Get Link

 

Visual Lint 6.0 has been released
Wednesday, February 1, 2017

The first public build of Visual Lint 6.0 has just been uploaded to our website.

As of today, Visual Lint 6.0 replaces Visual Lint 5.5 as the current supported Visual Lint version. Customers with active Visual Lint 5.x priority support, floating and site licence subscriptions should shortly be receiving updated licence keys for the new version, and upgrades for Visual Lint 1.x, 2.x, 3.x, 4.x and 5.x per user licences should become available in our online store shortly.

If you have purchased any full per-user Visual Lint licences since the start of October, your licence keys are already v6.x compatible so can start using the new version of the software right now without any need to upgrade. If you have purchased any upgrade licences during the same period, you will shortly receive new Visual Lint 6.x compatible licence keys.

The new version adds more complete support for the forthcoming PC-lint Plus, as well as support for Visual Studio 2017 RC and many other improvements.

 

Full details of the changes in this version are as follows:

 

Host Environments:
  • Added support for analysing standalone makefile projects.
     
  • Added support for makefiles within custom project (.vlproj) files. This allows makefiles requiring additional parameters to be analysed more easily.
     
  • Added support for Visual Studio 2017 RC. Note that the IDE will currently issue a warning that the extension is not compatible during installation.
     
  • Speeded up the loading of solutions and workspaces by loading the projects within them in parallel.
     
Analysis Tools:
  • PC-lint Plus crashes ("Serious Errors") are now parsed and reported as Fatal Errors with ID 399.
     
  • PC-lint Plus messages 890-897 are now correctly recognised as referencing ("supplemental", in PC-lint Plus parlance) issues.
     
  • Added PC-lint Plus specific compiler indirect files co-rb-vs2012.lnt, co-rb-vs2013.lnt, co-rb-vs2015.lnt and co-rb-vs2017.lnt, as well as a PC-lint Plus version of lib-rb-win32.lnt. All such indirect files are installed into the Visual Lint installation folder and referenced via -i directives on the generated PC-lint Plus command line.
     
  • When a PC-lint Plus per-project analysis task which uses more than one thread is running, Visual Lint can now dynamically reduce the number of active analysis tasks to take account of the number of analysis threads launched by the analysis task. [Visual Lint Professional and Enterprise Editions]
     
  • PC-lint and PC-lint Plus project indirect (project.lnt) files are now written when analysis tasks requiring them are created rather than when a solution/workspace is loaded.
     
Installation:
  • If the Visual Studio plug-in is selected for installation, a VSIX extension (VisualLintPackage.vsix) supporting Visual Studio 2017 RC is now installed into the Visual Lint installation folder. If Visual Studio 2017 is installed on the target system, the installer will automatically attempt to run the appropriate instance of VsixInstaller.exe to install the extension into Visual Studio 2017 RC.
     
Configuration:
  • When invoked, the Configuration Wizard now opens on the Analysis Tools page. As a result, the "Introductory" page has been removed.
     
  • The indirect files listed in the Configuration Wizard PC-lint Compiler Configuration page are now sorted primarily by description rather than filename. This works better than sorting by filename as the naming conventions for MSVC compiler indirect files between PC-lint and PC-lint Plus are slightly different.
     
  • Added an "analysis threads" option to the Command Line Options page to allow the value of the PC-lint Plus -max_threads option to be set on the command line in per-project analysis. [Visual Lint Professional and Enterprise Editions]
     
  • Renamed the "Maximum background analysis thread count" option on the Analysis Options page to "Maximum background analysis tasks".
     
User Interface:
  • Added a new Projects Display to VisualLintGui to provide a way of viewing the structure and properties of projects.
     
  • Added a new Project Properties Dialog to provide a way of viewing (and in the case of custom projects, editing) project properties. The dialog is available via context menu commands in the Projects Display and Analysis Status Display.
     
  • Added a new Project Variables Dialog to display the build variables defined in the associated project configuration.
     
  • Added an "Issue IDs" control (similar to the one in the Analysis Statistics Display) to the Display Filter Dialog as an alternative to editing the raw issue filter directly. Note that this control will be hidden if the dialog does not have access to a list of the issues which can be detected by the current analysis tool.
     
  • Added a new Makefile Properties Dialog. Where appropriate, the makefile command line can be edited here and the makefile output seen immediately.
     
  • Replaced the discrete "Clear Text Filter" buttons in the primary displays with integrated ones built into the corresponding text filter edit controls.
     
  • Added infotips to the Analysis Statistics Display.
     
  • When the current host environment is changed (e.g. when projects for different versions of Visual Studio are loaded) the details are now reflected in the Status View.
     
  • The "Analysis Tool:" message displayed in the Status View when Visual Lint starts now shows which host environment/project type the active analysis tool relates to.
     
Commands:
  • Added an "Export Project" command to the Analysis Status Display context menu to export the current project as a custom project (.vlproj) file.
     
  • Added an "Export Analysis Results" context menu command to the Analysis Status Display context menu.
     
  • Added a "File | New Project" command to VisualLintGui to allow new custom projects to be created directly within the environment.
     
  • Rearranged the VisualLintGui "File" menu and added accelerators to the "File | Open | Solution/Workspace/Project..." and "File | Open | Eclipse Workspace..." commands.
     
  • Added a "Send Feedback" command to the main menus in VisualLintGui and the Visual Studio and Eclipse plug-ins.
     
Reports:
  • HTML analysis reports are now displayed in the internal browser of the host environment (if available) by default.
     
Bug Fixes:
  • The platform name is now inferred from the targetPlatform element while reading Eclipse C/C++ (.cproject) project files.
     
  • Variables within file paths are now expanded correctly while reading IAR Embedded Workbench project files.
     
  • The Analysis Status Display "Troubleshooting | View Project Indirect File" context menu command is now disabled if Visual Lint has not been configured for PC-lint analysis of the associated project type, or if the project is still loading.
     
  • Fixed a bug relating to ProjectVersion elements within Atmel AVR Studio 5.0 project files.
     
  • Fixed a potential bug when interfacing to CppCheck, which could have caused cppcheck.exe to be omitted from the analysis tool pathname under some conditions - potentially causing analysis errors.
     

Download Visual Lint 6.0.0.273


Posted by Anna at 16:49 | Get Link

 

ACCU Conference 2016
Wednesday, June 8, 2016

In late April we exhibited at the ACCU Conference (#accuconf), which in many ways is our conference home. The first time we went was all the way back in 2007, and believe it or not we've not missed a year since!

Invaders...from Bournemouth

Invaders...from Bournemouth

We normally attend the sessions as delegates and also run an exhibition stand (which makes for some rather hectic juggling!), but this year was a little different as our founder Anna also presented the closing keynote "Comfort Zone" (which she describes as being about "Puppies, Spiders, User Interface Cheese-Moving and the Neuroscience of Anger"....).

Anna-Jayne Metcalfe presenting the closing keynote 'Comfort Zone'

Anna-Jayne Metcalfe from Riverblade presenting the closing keynote "Comfort Zone"

As ever, it was an interesting (and quite exhausting) week...but more than that, it was a week when the people who make ACCU what it is stood up and really showed what a truly amazing group of people they are. I'll talk about that specifically in a follow-up post shortly, but suffice it to say that we came away understanding just how lucky we are to have found this particular organisation...

Of course if you went, you'll know all this already. If you didn't, here's a handful of photos to give you an idea what you missed this time...

The Bristol suite at #accuconf

The Bristol suite at #accuconf

The Bristol suite at #accuconf.

This is where the keynotes take place on Wednesday, Thursday and Friday morning...and at the close of the conference on Saturday afternoon


Pete Goodliffe presenting 'The Codealow - a developer's bedtime story' on Wednesday evening

Pete Goodliffe presenting "The Codealow - a developer's bedtime story" during the Lightning Talks on Wednesday evening


Don't panic - it's just the conference dinner!

Don't panic - it's just the conference dinner!


Set the controls for the heart of the pudding...

Set the controls for the heart of the pudding...


OK. *Now* would be  the time to panic...

OK. Now would be the time to panic...


Comfort Zone

Comfort Zone

Comfort Zone

Comfort Zone

Comfort Zone

Comfort Zone

Anna-Jayne Metcalfe presenting the ACCU 2016 closing keynote "Comfort Zone"


If you'd like to see the keynote, there's a video of it on YouTube and the slides are here.


Posted by Anna at 14:02 | Get Link

 

PC-lint Plus is coming - and with it, full support for C++ 11 and C++ 14
Monday, December 14, 2015

Gimpel have just announced a beta of PC-lint Plus - a new product which will sit alongside PC-lint. To understand the (rather complex, I'm afraid) background and the background to why a beta of PC-lint Plus has been announced rather than one for the long awaited 9.00m patch, please keep reading...

It is no secret that PC-lint 9.0 struggles with some C++ 11/14 code - and especially any code making use of C++ 11 variadic templates. The result is errors - and nasty, hard to work around ones at that.

Under Windows, this is particularly noticable when analysing projects written for Visual Studio 2013 and 2015, which both use variadic templates in their system headers (Visual Studio 2012 and earlier did not).

A glance at the C++ 11 support page on the Gimpel website illustrates this rather well, with the following C++ 11 features shown as not yet being supported as of PC-lint 9.00L:

  • Allowing move constructors to throw [noexcept] (N3050)
  • Variadic templates (N2242)
  • Extending variadic template template parameters (N2555)
  • Initializer lists (N2672)
  • Generalized attributes (N2761)
  • Generalized constant expressions (N2235)
  • Inheriting constructors(N2540)
  • Unicode string literals (N2442)
  • Raw string literals (N2442)
  • Universal character names in literals (N2170)
  • User-defined literals (N2765)
  • Inline namespaces (N2535)
  • Unrestricted unions (N2544)
  • Minimal support for garbage collection and reachability-based leak detection (N2670)
  • Extended integral types (N1988)

That's just of course from C++ 11, and with C++ 14 also out and C++ 17 (which like C++ 11 promises major changes to the language) is just around the corner, keeping up has been getting more and more difficult. As Jim Gimpel said to us recently:

Unfortunately, keeping up with the evolving C++ standards which seemed to know no bounds, became more and more difficult as Gimpel Software did have bounds.

It is worth remembering that PC-lint was first introduced in 1985, so presumably the C++ front end in 9.00L is a direct descendent of that in the original product rather than one of the standard C++ front ends (EDG, Clang, GCC etc.) our industry has effectively settled upon since. As a result, every change in the language no doubt requires comparable changes in the PC-lint front end. Given how much C++ has evolved recently (and continues to evolve, looking forward to C++ 17 and beyond), that's potentially a huge ongoing task.

Like many others, for some time we have been asking Gimpel for an estimate of roughly when an update addressing the remaining C++ 11 issues were realistically likely to become available. Although throughout last year we thought that support for variadic templates issue (the missing feature which seemed to be catching most people out) would be resolved with 9.00L in the Autumn sadly it was not to be, and by the start of this year it became obvious to us that we would have to put into place a workaround to allow customers to analyse Visual Studio 2013 and 2015 projects. Hence the system headers compatibility thunk described in Visual Studio 2013, PC-lint and C++ 11 Variadic Templates and available in Visual Lint 4.5.9.239 onwards.

Around the same time, Gimpel also updated us on their future plans, and how they intended to offer complete C++ 11/14 support. Although we couldn't talk about that publicly at the time, now that they have announced the beta we are free to do so.

The bottom line is that rather than continue to try to keep the existing PC-lint front end up to date with changes in the C++ Standard, Gimpel have decided to develop a spin-off product using the industry standard Clang front-end. The existing PC-lint 9.0 and Flexelint 9.0 products will continue to be supported for the foreseeable future.

This is of course a major development, and in consequence is one that couldn't have been released as a PC-lint 9.0 patch anyway. As the Clang source requires a modern C++ compiler to compile it, this makes distributing PC-lint Plus as obfuscated source (as Flexelint currently is) impractical as many compilers for non-x86 platforms would not be able to compile it.

The move to Clang also means that in future PC-lint Plus will be able to keep up with changes in the C++ standard as fast as new versions of Clang can be integrated. So, if (for example) the C++ Module System proposals (N4465/N4466) (which allow imports of compiled units to replace #includes of header files, thus drastically reducing build times) make it into C++ 17, PC-lint will be able to keep up without another major hiatus.

For Windows, both 32 bit (pclp32.exe) and 64 bit (pclp64.exe) binaries will be provided along with full support for C++ 11/14, Visual Studio 2013 and 2015. For Linux, a pre-built x86 binary will be available which should simplify things for developers on that platform (and potentially allow the pricing of the Linux version of PC-lint to become more competitive with the Windows variant). For non-x86 platforms etc., Flexelint will continue to be available in its current form.

The new product supports a considerable number of new messages (far too many to list!). In addition, obsolete options such as +linebuf and +macros have been removed.

As far as our own products are concerned, Visual Lint 5.0.6.254 onwards are aware of PC-lint Plus (we've actually been testing with alpha builds since the summer) and should work with beta versions. Support for 64 bit builds of PC-lint will become available in the New Year, and now that the beta has been announced we will be adding documentation for the new messages to the message database installed with the product as information becomes available.

Overall this is a huge step forward, but we are aware that it may come as a shock to many who were expecting PC-lint 9.00m. As soon as we know the details of Gimpel's PC-lint 9.0 to PC-lint Plus upgrade policy rest assured we will be talking about it. In the meantime, please do join the beta programme and help test it!

Gimpel's beta announcement can be found in the blogpost Upcoming Support for C++14/VS2015.


Posted by Anna at 11:24 | Get Link

 

ResOrg 2.0.6.25 has been released
Monday, November 9, 2015

This is a maintenance update for ResOrg 2.0. The following changes are included:

  • Added support for Visual Studio 2015.
     
  • Added support for Windows 10.
     
  • Added a helpfile.
     
  • Removed support for Windows 2000.
     
  • ResOrgApp now declares itself as system DPI aware to reduce the likelyhood of DPI virtualization.
     
  • Icons used within the ResOrg displays now reflect the current system defined icon sizes rather than being hardcoded to 16x16, 32x32 etc.
     
  • Tweaked the layout of the AboutBox.
     

Download ResOrg 2.0.6.25


Posted by Anna at 10:30 | Get Link

 

ACCU Conference 2015
Monday, April 27, 2015

We spent last week at the ACCU Conference in Bristol having our brains filled with gloopy tech goodness. It was (as ever) a real blast.

chandler_carruth presenting 'C++: Easier, Faster, Safer' at ACCU 2015

We had our demo rig with us as usual, and a steady stream of folks came along to chat to us and acquire caffeine from the expresso machine on the table next door. We came back absolutely exhausted, so no detailed photoblog this time I'm afraid!

However, for me the highlight was Chandler Carruth's closing keynote C++: Easier, Faster, Safer, in which he talked about how Google were using Clang and LLVM to (among other things) perform large scale automated refactoring (cue lots of furious scribbling...)

The synopsis of the keynote says it far better than I could:

Over the past five years, the prospect of developing large software projects in C++ has changed dramatically. We have had not one but two new language standards. An amazing array of new features are available today that make the language more elegant, expressive, and easy to use. But that isn't the only change in the last five years. LLVM and Clang have helped kick start a new ecosystem of tools that make developing C++ easier, faster, and safer than ever before.

This talk will cover practical ways you can use the tools we have built in the LLVM and Clang projects. It will show you what problems they solve and why those problems matter. It will also help teach you the most effective ways we have found to use all of these tools in conjunction with modern C++ coding patterns and practices. In short, it will show you how to make *your* C++ development experience easier, faster, and safer.

Next year's conference is provisionally scheduled for 19th-23rd April. See you there!


Posted by Anna at 15:04 | Get Link

 

Visual Studio 2013, PC-lint and C++ 11 Variadic Templates
Monday, February 23, 2015

Although we added support for Visual Studio 2013 some time ago, PC-lint has lagged behind somewhat and even now (well over a year after it was released) has difficulty analysing any projects for it which use the Standard Template Library (STL) to any significant extent.

In large part this is due to the fact that PC-lint has to date lacked support for C++ 11 variadic templates (which are heavily used in parts of the Visual Studio 2013 system headers). With PC-lint 9.00L (the current patch level) even a simple #include <map> will trigger an internal error (9.00k was less vocal, but still raised errors you had to suppress).

Although this was not a huge problem when Visual Studio 2013 first came out (most development teams take their time moving to new versions of Visual Studio), it is now sufficiently mature that many teams are moving to it, and that's potentially a big problem if you also use PC-lint. The arrival of the free Visual Studio 2013 Community Edition has of course accelerated this trend.

Although we were expecting this to have been fixed by Gimpel around the middle of last year they apparently found that doing so proved to be far trickier than anticipated, with the end result that this limitation has become an increasingly large problem. The latest information we have is that there will be a beta with full support for variadic templates available sometime in March, so at least there is now some light at the end of this particular tunnel.

However, that does probably mean that there won't be a complete "production" fix for at least a couple of months after that. Hence we have been looking at potential workarounds (with one of our customers who is in the process of moving their codebase to Visual Studio 2013 and has run into this issue) to see what we can do in the meantime.

The most promising approach we have identified so far is actually very simple - just substitute the system headers for an earlier version of Visual Studio while analysing Visual Studio 2013 projects by modifying the -i directives for the system headers, while leaving the rest of the analysis configuration unchanged. The major caveat is of course that you need to have an earlier version of Visual Studio co-installed, but in practice that's pretty common.

The second caveat is that you may run into problems if you are using STL functionality (e.g. std::make_unique) which is implemented in the Visual Studio 2013 system headers but absent from earlier versions. Even then, there are workarounds in some cases - it really depends on what you use in your projects. It also goes without saying that the workaround can't handle any code you write in your own projects which uses variadic templates directly.

Given all that however it does seem to work rather well (it even seems to make it practical to analyse Visual Studio 2013 projects with PC-lint 8.0, which is an unexpected bonus!) and as a result we've decided to build this into Visual Lint so that it can take care of it automatically (but optionally, of course) for you when it determines that you are using PC-lint 9.00L or earlier. For now we've limited it to using the system headers from a Visual Studio 2012 or 2010 installation on the same machine, but we can extend that if needed.

This functionality should be out as part of Visual Lint 4.5.9.239 soon, but we are happy to release preliminary builds on a case by case basis if it will help other teams who are running into the same problem. Likewise if you have any questions about the specifics of this approach or are running into this issue (not necessarily just with Visual Studio) just let us know and we will be happy to help.

Update: The build is now available. Download Visual Lint 4.5.9.239


Posted by Anna at 18:19 | Get Link

 

How Visual Lint parses projects and makefiles
Thursday, November 6, 2014

Code analysis tools can require a lot of configuration to be useful. Whilst some (e.g. Vera++ or cpplint.py) need very little configuration to make use if effectively, others such as PC-lint (and even, to a lesser extent, CppCheck) may need to be fed pretty much the same configuration as the compiler itself to be useful. As a result the command lines you need to use with some analysis tools are pretty complex in practice (which is of course a disincentive to using them, and so where Visual Lint comes in. But I digress...).

In fact, more capable code analysis tools may need to be given even more information than the compiler iteself to generate meaningful results - for example they may need to be configured with the built-in preprocessor settings of the compiler itself. In a PC-lint analysis configuration, this is part of the job compiler indirect files such as co-msc110.lnt do.

As a result of the above, a product such as Visual Lint which effectively acts as a "front end" to complex (and almost infinitely configurable) code analysis tools like PC-lint needs to care about the details of how your compiler actually sees your code every bit as much as the analysis tool itself does.

What this means in practice is that Visual Lint needs be able to determine the properties of each project it sees and understand how they are affected by the properties of project platforms, configurations and whatever compiler(s) a project uses. When it generates an analysis command line, it may need to reflect those properties so that the analysis tool sees the details of the preprocessor symbols, include folders etc. each file in the project would normally be compiled with - including not only the properties exposed in the corresponding project or makefile, but also built-in symbols etc. normally provided by the corresponding compiler.

That's a lot of data to get right, and inevitably sometimes there will be edge cases where don't quite get it right the first time. It goes without saying that if you find one of those edge cases - please tell us!

So, background waffle over - in this post I'm going to talk about one of the things Visual Lint does - parsing project files to identify (among other things) the preprocessor symbols and include folders for each file in order to be able to reflect this information in the analysis tool configuration.

When analysing with CppCheck, preprocessor and include folder data read in this way can be included on the generated command line as -D and -I directives. Although we could do the same with PC-lint, it is generally better to write the preprocessor and include folder configuration to an indirect ("project.lnt") file which also includes details of which implementation (.c, .cpp, .cxx etc.) files are included in the project -as well as any other project specific options. For example:

// Generated by Visual Lint 4.5.6.233 from file: SourceVersioner_vs90.vcproj
// -dConfiguration=Release|Win32

//
-si4 -sp4                     // Platform = "Win32"
                              //
+ffb                          // ForceConformanceInForLoopScope = "TRUE"
-D_UNICODE;UNICODE            // CharacterSet = "1"
-DWIN32;NDEBUG;_CONSOLE       // PreprocessorDefinitions = "WIN32;NDEBUG;_CONSOLE"
-D_CPPRTTI                    // RuntimeTypeInfo = "TRUE"
-D_MT                         // RuntimeLibrary = "0"
                              //
                              // AdditionalIncludeDirectories = ..\Include"
-save -e686                   //
  -i"..\Include"              //
-restore                      //
                              //
                              // SystemIncludeDirectories = "
                              //   F:\Projects\Libraries\boost\boost_1_55_0;
                              //   C:\Program Files (x86)\
                              //       Microsoft Visual Studio 9.0\VC\include;

                              //   C:\Program Files (x86)\
                              //       Microsoft Visual Studio 9.0\VC\atlmfc\include;

                              //   C:\Program Files\
                              //       Microsoft SDKs\Windows\v6.0A\include;

                              //   F:\Projects\Libraries\Wtl\8.1\Include"
                              //
-save -e686                   //
 +libdir(F:\Projects\Libraries\boost\boost_1_55_0)
 +libdir("C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include")
 +libdir("C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include")
 +libdir("C:\Program Files\Microsoft SDKs\Windows\v6.0A\include")
 +libdir("C:\Program Files\Microsoft SDKs\Windows\v6.0A\include")
 +libdir(F:\Projects\Libraries\Wtl\8.1\Include)
 -iF:\Projects\Libraries\boost\boost_1_55_0
 -i"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include"
 -i"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include"
 -i"C:\Program Files\Microsoft SDKs\Windows\v6.0A\include"
 -iF:\Projects\Libraries\Wtl\8.1\Include
-restore                      //
                              //
SourceVersioner.cpp           // RelativePath = "SourceVersioner.cpp"
SourceVersionerImpl.cpp       // RelativePath = "SourceVersionerImpl.cpp"
stdafx.cpp                    // RelativePath = "stdafx.cpp"
Shared\FileUtils.cpp          // RelativePath = "Shared\FileUtils.cpp"
Shared\FileVersioner.cpp      // RelativePath = "Shared\FileVersioner.cpp"
Shared\PathUtils.cpp          // RelativePath = "Shared\PathUtils.cpp"
Shared\ProjectConfiguration.cpp
                              // RelativePath = "Shared\ProjectConfiguration.cpp"
Shared\ProjectFileReader.cpp  // RelativePath = "Shared\ProjectFileReader.cpp"
Shared\SolutionFileReader.cpp // RelativePath = "Shared\SolutionFileReader.cpp"
Shared\SplitPath.cpp          // RelativePath = "Shared\SplitPath.cpp"
Shared\StringUtils.cpp        // RelativePath = "Shared\StringUtils.cpp"
Shared\XmlUtils.cpp           // RelativePath = "Shared\XmlUtils.cpp"

A file like this is written for every project configuration we analyse, but the mechanism used to actually read the configuration data from projects varies slightly depending on the project type and structure.

In the case of the Visual Studio 2002, 2003, 2005 and 2008 .vcproj files Visual Lint was originally designed to work with, this is straightforward as the project file contains virtually all of the information needed in a simple to read, declarative form. Hence to parse a .vcproj file we simply load its contents into an XML DOM object and query the properties in a straightforward manner. Built-in preprocessor symbols such as _CPPUNWIND are defined by reading the corresponding properties (EnableExceptions in the case above) or inferred from the active platform etc.

Similarly, for Visual C++ 6.0 and eMbedded Visual C++ 4.0 project files we just parse the compiler command lines in the .dsp or .vcp file directly. This is pretty straightforward as well as although .dsp and .vcp files are really makefiles they have a very predictable structure. Some other development environments (e.g. Green Hills MULTI, CodeVisionAVR) have bespoke project file formats which are generally easy to parse using conventional techniques.

Visual Studio 2010, 2012 and 2013 .vcxproj project files are far more tricky, as the MSBuild XML format they use is effectively a scripting language rather than a declarative format. To load them, we effectively have to execute them (but obviously without running the commands they contain).

As you can imagine this is rather tricky! We basically had to write a complete MSBuild parsing engine* for this task, which effectively executes the MSBuild script in memory with defined parameters to identifiy its detailed properties.

* Although there are MSBuild APIs which could conceivably help, there are implemented in managed code - which we can't use in a plug-in environment due to .NET framework versioning restrictions. Instead, our MSBuild parsing engine is written natively in C++.

To work out the parameters to apply to the MSBuild script, we prescan the contents of the .vcxproj file to identify the configurations and platforms available. Once we have those, we can run the script in memory and inspect the properties it generates for the required build configuration. This process is also used with CodeGear C++ and Atmel Studio projects, both of which are MSBuild based.

Eclipse projects (.project and .cproject files) are also XML based and are not too difficult to parse, but whereas it is straightforward to work out how things are defined in a .vcproj file, Eclipse project files are much less clearly defined and more variable (not surprising as they effectively represent serialised Java object data).

To make matters worse, each compiler toolchain can have its own sub-format, so things can change in very subtle ways between based projects for different Eclipse based environments such as Eclipse/CDT, QNX Momentics and CodeWarrior. In addition, Eclipse C/C++ projects come in two flavours - managed builder and makefile.

Of the two, managed builder projects are easy to deal with - for example to determine the built-in settings of the compiler in a managed builder we read the scanner (*.sc) file produced by the IDE when it builds the project, and add that data to the configuration data we have been able to read from the project file.

The scanner (.sc) file is a simple XML file located within the Eclipse workspace .metadata folder. Here's an extract to give you an idea what it looks like:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?scdStore version="2"?>
<scannerInfo id="org.eclipse.cdt.make.core.discoveredScannerInfo">
<instance id="cdt.managedbuild.config.gnu.mingw.exe.debug.116390618;
  cdt.managedbuild.config.gnu.mingw.exe.debug.116390618.;
  cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.1888704458;
  cdt.managedbuild.tool.gnu.cpp.compiler.input.391761176">
<collector id="org.eclipse.cdt.make.core.PerProjectSICollector">
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++"/>
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/mingw32"/>
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/backward"/>
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include"/>
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include"/>
<includePath path="c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include-fixed"/>
<definedSymbol symbol="__STDC__=1"/>
<definedSymbol symbol="__cplusplus=1"/>
<definedSymbol symbol="__STDC_HOSTED__=1"/>
<definedSymbol symbol="__GNUC__=4"/>
<definedSymbol symbol="__GNUC_MINOR__=5"/>
<definedSymbol symbol="__GNUC_PATCHLEVEL__=2"/>
<definedSymbol symbol="__GNUG__=4"/>
<definedSymbol symbol="__SIZE_TYPE__=unsigned int"/>
    .
    .
    .
</collector>
</instance>
</scannerInfo>

Unfortunately scanner files are not generated for makefile projects, and the enclosing project files do not give details of the preprocessor symbols and include folders needed to analyse them. So how do we do it?

The answer is similar to the way we load MSBuild projects - by running the makefile without executing the commands within. In this case however the make tools themselves can (fortunately!) lend a hand, as both NMake and GNU Make have an option which runs the makefile and echoes the commands which would be executed without actually running them. For NMake this is /n and GNU Make -n or --just-print.

The /B (NMake) -B (GNU Make) switch can also be used to ensure that all targets are executed regardless of the build status of the project (otherwise we wouldn't be able to read anything if the project build was up to date).

If we run a makefile with these switches and capture the output we can then parse the compiler command lines themselves and extract preprocessor symbols etc. from it. As so many compilers have similar command line switches for things like preprocessor symbols and include folders this is generally a pretty straightforward matter. Many variants of GCC also have command line options which can report details of built-in preprocessor symbols and system include folders, which we can obviously make use of - so the fact that many embedded C/C++ compilers today are based on GCC is very useful indeed.

There's a lot of detail I've not covered here, but I hope you get the general idea. It follows from the above that adding support for new project file types to Visual Lint is generally not difficult - provided we have access to representative project files and (preferably) a test installation of the IDE in question. If there is a project file type you would like us to look at, please tell us.


Posted by Anna at 12:32 | Get Link

 

Business of Software Conference Europe
Wednesday, July 2, 2014

Kathy Sierra on 'Motivation Matters' at Business of Software Europe

Our founder Anna attended the Business of Software Europe Conference in Cambridge last week, and it was quite something indeed.

Although the Business of Software Conference has been running for several years in the USA, this is the first year an event has been held in Europe (and what better a place than Cambridge?). The conference covered everything from live Python telephony to the psychology of the internet and the organisation and management of sales teams, so it was pretty diverse.

If you are interested in more than just coding, this is an event we can strongly recommend. Photos and videos from the conference should be online soon, so if you are interested please stay tuned.


Posted by Anna at 10:34 | Get Link

 

Visual Lint and Windows Driver Kit (WDK) projects
Tuesday, April 02, 2013

We have recently been working with Don Burn on PC-lint analysis of Windows Driver Kit (WDK) projects, and he has written an interesting article on the subject titled "Another Look at Lint" in the March-April 2013 issue of the NT Insider.

Within the article you will find the following rather complementary passage:

Finally the ultimate tool for using PC-lint with the WDK is Riverblade's Visual Lint. This is a third party tool providing an integrated package that works inside VS2012. The tool is an add-on to PC-lint which you must still purchase. The capabilities include background analysis of the project, coded display listings that - like Visual Studio - clicking on the error takes you to the line to edit and provides easy lookup of the description of the errors. The latest version of Visual Lint (4.0.2.198) is required for use with the WDK. The tool has a minor bug that if there are two subprojects with the same name, such as filter in the Toaster sample, one needs to be renamed for analysis to work. A fix is in the works.

To use Visual Lint with the WDK choose LintLdx.lnt as the standard lint configuration file for the tool. There is a 30-day free trial of Visual Lint available so if you are considering PC-lint, take a look at what Visual Lint can add to the experience. I expect to be using it for much of my work.

Our thanks to Don Burn for his patience while we worked through the issues raised by the analysis of WDK projects. As a postscript, a fix for the bug he refers to above has already been checked in and should become available in the next public Visual Lint build (most likely 4.0.3.200).


Posted by Anna at 16:29 | Get Link

 

Visual Studio 2012 theme support
Thursday, Aug 2, 2012

One of the unexpected (and I would suggest from the comments, unwelcome) changes sprung on developers in the Visual Studio 2012 Beta back in February was the Metroification of the development environment.

However, eye candy (and eyesores!) come and go, and within that change is a more fundamental one - direct support for themes within the Visual Studio IDE. The Visual Studio 2012 Beta and RC include two themes - light (i.e. grey) and dark. Whilst the latter has an obvious appeal within the developer community (we all know devs who prefer green text on a black background) the former hasn't exactly been welcomed, to say the least.

Personally, rather than develop custom theme support for each tool individually I wish they'd just add a "dark" theme to Windows instead and respect the theme settings of the operating system. Obviously my view just isn't "cool" enough for the Visual Studio UX team, but I digress...

Although a campaign to retain the existing Visual Studio 2010 theme has been running on the UserVoice site since the beta arrived (see Add some color to Visual Studio 11 and Leave VS 2010 theme (and the theme editor extension) as an option) Microsoft have not indicated what - if any - changes will be made to the Visual Studio 2012 themes at RTM.

Our working assumption therefore has to be that the themes in the RTM will be broadly comparable with those in the RC (i.e. light and dark). We will find out whether that assumption is correct later this month, of course.

With that in mind, we have been working on theme support in the development branch for Visual Lint for some time now, and things are now beginning to come together:

Visual Lint running with the Visual Studio 2012 RC dark theme

Visual Lint running with the Visual Studio 2012 RC light theme

As Visual Lint uses standard Win32 controls for most of the UI (which for the most part do not support custom text/background colours), to get this far we have had to write custom painted WTL checkbox, radio button, combobox and header controls in addition to the usual WM_CTLCOLORxxxx voodoo. Other UI elements such as menus, scrollbars, command buttons etc. yet haven't yet been looked at, but hopefully will be in due course (there seems to be some indication in the MSDN blogs that scollbars will be auto-themed by the RTM, but we'll see).

Within the displays themselves, the text and background colours of each item are checked for adequate contrast, and the text colour adjusted (by tweaking the luminance) automatically if need be.

Although the Visual Studio interfaces expose the colours used in the active theme (via IVsUIShell2::GetVSSysColorEx() ), they do not seem to provide any way of detecting if the theme has changed (or indeed, finding out which theme is actually running at the time). Our workaround for this is simply to reload the colour scheme whenever the "Tools|Options" command has been executed. We don't really care which theme is running after all - just what colour values it uses, and where.

Indeed, one of the first things we did while working on this was to dump all of the colour values used by the VS2012 RC light & dark themes, as well as the default VS2010 theme, into spreadsheets so we could use them for testing without firing up a host instance of the IDE (developing add-ins may be fun, but it is also much slower than working on your own executable).

Finally, it is a little known fact that the Visual Studio IDE has had colour scheme support internally for some time, so the scheme we have designed will also work with Visual Studio 2010 if you have the theme editor extension installed:

Visual Lint running with Visual Studio 2010 with a modified 'Expression' theme

Needless to say, all of this is proving to be a major task, and it has therefore diverted significant resources from other things we should really have been working on this summer. As a consolation, the theme code we're developing is generic (albeit only on Windows), so can also be used with Eclipse 4.0 (I note that themes are coming to that IDE as well) when the time comes.

Another obvious benefit is of course that there's potentially at least one new CodeProject article (want a themed XP button with a custom background colour? We know how to do it now) in all of this once the dust settles and the inevitable bugs have crawled away. It's about time I wrote a new one, anyway.

Once Visual Lint theme support is complete, we'll obviously also take a look at ResOrg. Beyond that, I think a new article is a foregone conclusion, once we've cleaned the code up a bit and built a good enough demo project...


Posted by Anna at 12:45 | Get Link

 

Introducing VisualLintGui
Friday, April 20, 2012

If you have been following me (@annajayne) on Twitter, you may have noticed me talking about something called "VisualLintGui".

This is actually the second of two projects (the first being VisualLintConsole - the command line version of Visual Lint) we got underway after the release of Visual Lint 3.0.

Now that VisualLintConsole (the command line version of Visual Lint) is out in the wild, we have turned our attention to VisualLintGui. This is, as the name suggests, a standalone Visual Lint application with a graphical user interface - basically a text editor focused on code analysis:

Although it has been fully functional in terms of analysis functions for quite some time, until recently we were not able to devote a great deal of time to the details of its user interface. That has now changed, and since February VisualLintGui has gained many essential capabilities including a syntax colouring editor with analysis issue markers, MDI tabs, Find/Replace and Source/Header flip to name but a handful of the more obvious recent changes.

VisualLintGui is currently capable of analysing projects for Visual Studio, Visual C++, Eclipse, CodeGear C++ and AVR Studio 5.0, but it can obviously potentially analyse a far wider variety of codebases than that.

Indeed, one of the reasons we have been keen to develop it is to provide a way to support embedded IDEs for which developing a Visual Lint plug-in is not a viable proposition. As such we expect to add support for further project and workspace file formats as and when our customers need them.

VisualLintGui currently resides in our Visual Lint development branch, but given the recent pace of development on it we are likely to look at porting it back into Visual Lint 3.5 in the not too distant future.

In the meantime we will have a development build on our stand at the ACCU Conference next week, so if you are going please do come and take a look.


Posted by Anna at 15:23 | Get Link

 

ResOrg 2.0 has been released
Sunday, January 22, 2012

Well, it's done. After a rather extended incubation period ResOrg 2.0.0.15 (the first public ResOrg 2.0 build) was uploaded earlier this morning, and the ResOrg product pages updated to match.

If you have used ResOrg 1.x before, you will notice that the user interface of ResOrg 2.0 is subtly different from its predecessor - notably in the Visual Studio plug-in (which now of course supports Visual Studio 2008 and 2010...).

In particular, the old (and rather limited) "ResOrg.NET Explorer" toolwindow has been replaced by a much more useful "Symbol Files Display" which is also available in the standalone application.

If you are using Visual Studio 2010, it might interest you to know that ResOrg 2.0 can automatically update Ribbon Designer (.mfcribbon-ms) files when an ID referenced in a ribbon resource is renumbered.

I won't include any screenshots in this post as a couple of good ones were included in the previous post, however if you are reading this post in your RSS reader you can find them at https://www.riverblade.co.uk/blog.php?archive=2011_12_01_archive.xml#2011121501.


Posted by Anna at 11:24 | Get Link

 

Visual Lint and Atmel AVR Studio 5
Friday, September 16, 2011

From our perspective one of the more intriguing embedded environments to appear recently is Atmel's AVR Studio 5.

When I first saw a screenshot of this IDE (it was mentioned in a post in the CodeProject Lounge) it was immediately obvious that this was some sort of Visual Studio derivative.

In fact, although it uses GCC toolchains, the environment is based on the Visual Studio 2010 isolated shell (which incidentally is something we briefly considered using ourselves for a future standalone GUI version of Visual Lint, but decided against because of its complexity and the size of the download).

It obviously occured to us then that as a Visual Studio derivative, it shouldn't be too difficult to get Visual Lint running within it. The first step was obviously to install the IDE in a VM (XP SP3 - doesn't XP look a bit old these days...?) and experiment with some projects.

AVR Studio 5 codebases uses the Visual Studio 2010 solution file format (albeit rebadged as a .avrsln file) and a new MSBuild based project file format (.avrgccproj), so the first thing we obviously had to do was implement parsers for these files (something that will also benefit LintProject Pro, of course). Once that was done, we turned our attention to getting Visual Lint to load within the IDE itself.

This turned out to be fairly straightforward. Although AVR Studio 5 does not seem to support COM add-in registration in HKEY_LOCAL_MACHINE (which is how the Visual Lint add-in registers in Visual Studio), the corresponding registration in HKEY_CURRENT_USER\Software\Atmel\AVRStudio\5.0\AddIns does work. Although this is problematical from an installation point of view (see my previous post on the Visual Studio 11 Developer Preview) it is not a showstopper by any means.

With manual add-in registration in place, Visual Lint loaded within the IDE. Although a few minor tweaks were needed to work around issues such as AVR reporting itself as "Visual Studio Express Edition, version 1.0" (which caused the version detection code in Visual Lint to default to 16 colour command bitmaps!) those were easily addressed.

As a result, we now have AVR Studio 5 running with a development build of Visual Lint:

Visual Lint running within AVR Studio 5

Visual Lint running within AVR Studio 5

Although we still have quite a bit to do (not least the code editor markers and installer) before AVR Studio 5 can become a supported host environment for Visual Lint this is a very promising start. Needless to say, beta testers are welcome.


Posted by Anna at 16:17 | Get Link