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 5.0.4.249 has been released
Tuesday, July 14, 2015

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

  • Added "Check for Updates" and "Configure Update Check Schedule" commands to the VisualLintGui "Help" menu
     
  • Revised the text used in the installer dialogs which handle update checks for clarity.
     
  • Fixed a bug which would cause manual analysis to fail if the file was not part of a project.
     
  • Fixed a bug in the Visual Studio plug-in which caused a Configuration Wizard prompt to repeatedly appear when hosted in Atmel Studio 6.1 or 6.2.
     
  • Fixed a data validation bug in the "Analysis Tool" Options page.
     
  • Modified the Visual C++ 2010/2012/2014/2015 project (.vcxproj) file parser for compatibility with Visual Studio 2013 Intel C++ Compiler 15.0 project files which identify the base project version via <_ProjectFileVersion> elements.
     
  • Corrected a couple of "Analysis Tool not found" prompts.
     

Download Visual Lint 5.0.4.249


Posted by Anna at 13:18 | Get Link

 

Business of Software Conference Europe 2015
Monday, June 15, 2015

Next week we will be at the Business of Software Europe Conference at Robinson College in Cambridge, so if you happen to be there please do come and say hello. If last year's event was anything to go by (and no, I don't just mean the free bar and retro gaming arcade...) it should be quite something!

The retro gaming arcade at Business of Software Europe 2014

If you are interested in more about the software business than just the tech stuff, this is an event we can strongly recommend. If you can't make it the #bos2015 hashtag should give a flavour of the event once it kicks off on Tuesday.

No doubt the welcome reception (being held at Redgate's offices this year) will be a source of at least a few drunken tweets on Tuesday evening...

See you in Cambridge!


Posted by Anna at 14:42 | Get Link

 

Visual Lint 5.0.3.247 has been released

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

  • If available, details of the worst case stack usage for the active file are now displayed in the status bar.
     
  • The "Manual Analysis" context menu command in the Analysis Status Display is now (correctly) disabled for analysis tools (e.g. FxCop) which do not support per-file analysis.
     
  • Fixed a potential crash in the x64 build of the Eclipse plug-in, which could manifest when a file or project was included or excluded from analysis.
     
  • Fixed a bug in VisualLintGui in the loading of scanner (.sc) files associated with Eclipse C/C++ projects.
     
  • Visual Studio MSBuild C# project (.csproj) files which contain a "Project" element identifying the project version will now be loaded correctly. This variation of the .csproj file format is associated with Visual Studio 2013.
     
  • Visual Studio MSBuild C# project (.csproj) files without identifing version data will now be identified as the baseline version (9.0 - i.e. Visual Studio 2008) for the file format.
     
  • Optimised the loading of Eclipse C/C++ projects.
     
  • Fixed a flicker issue when VisualLintGui starts running.
     

Download Visual Lint 5.0.3.247


Posted by Anna at 10:08 | Get Link

 

Visual Lint 5.0.2.246 has been released
Monday, June 8, 2015

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

  • Added a status bar (displaying worst case stack usage, as documented by PC-lint Elective Note 974) to the Stack Usage Display.
     
  • Renamed the analysis results root folder created by default within the solution/workspace root folder from "Visual Lint" to ".visuallint". Analysis results folders created using the previous naming scheme will still be used if present.
     
  • Fixed a bug in VisualLintConsole which could prevent custom analysis options (the /param switch) from being applied in some cases.
     
  • Corrected various "<nnn> issues reported" informational messages to take into account the active display filter settings.
     
  • Corrected the series ordering of the issue ID charts within the Analysis Results Display, reports etc.
     
  • Minor revisions to the layouts of the "Registration" Options page and Registration Key dialog.
     
  • Added preliminary support for Windows 10 (build 10074).
     
  • Added logging of Visual Studio system include folder substitutions for compatibility with PC-lint 9.00l and earlier. The new logging will also warn if PC-lint 9.00l or earlier is being used to analyse a Visual Studio 2013 or 2015 project and the system include folders cannot be substituted for those of Visual Studio 2012 or 2010 for some reason.
     
  • Added a "PC-lint stack usage reports" topic to the helpfile.
     

Posted by Anna at 11:52 | Get Link

 

Visual Lint 5.0.1.245 has been released
Tuesday, May 14, 2015

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

  • Environment variables defined in an Eclipse/CDT or Netburner project within "C/C++ Build-> Environment" (and saved in a org.eclipse.cdt.core.prefs file stored in the project's .settings folder) are now expanded in project analysis configurations.
     
  • Fixed a bug which in VisualLintGui which could cause an incorrect solution/workspace configuration to be selected in VisualLintGui when the active configuration was changed using the toolbar on the main menu.
     
  • The "Configurations" drop list on the VisualLintGui toolbar is now correctly disabled (with the right data...) if the current solution/workspace has the "Always analyse this configuration" property active. [Visual Lint Enterprise Edition]
     
  • The "Configure for" drop lists in the Configuration Wizard and "Analysis" Options page are now sorted and show all host environments, irrespective of whether they are actually installed (this change is necessary to analyse some MSBuild Windows SDK projects).
     
  • The Analysis Results Display "All files" view is now available in Visual Lint Professional Edition (it was originally implemented in Visual Lint Enterprise Edition). In consequence, the Analysis Status Display "View Analysis Results" context menu command is also now available in Visual Lint Professional Edition if a project is selected.
     
  • Removed the -printf_code(s, TCHAR *) directive from the PC-lint suppressions file rb-win32-pclint8.lnt (included by lib-rb-win32.lnt) as it was causing erroneous instances of error 154 while analysing some projects.
     
  • Corrected the location of the "Product Editions" topic in the helpfile table of contents.

Posted by Anna at 11:32 | 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 Lint 5.0 has been released
Tuesday, March 31, 2015

Well, it's done - the first public build of Visual Lint 5.0 has just been uploaded to our website.

As of today, Visual Lint 5.0 replaces Visual Lint 4.5 as the current supported Visual Lint version. Customers with active priority support, floating and site licence subscriptions should already have received updated licence keys for the new version, and upgrades for Visual Lint 1.x, 2.x, 3.x and 4.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 January, your licence keys are already v5.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 5.x compatible licence keys.

Visual Studio 2015 support aside, probably the most visible change in Visual Lint 5.0 is the new Stack Usage Display, which displays in colour coded form the results of a PC-lint 9.0 stack usage report (the +stack directive). The current implementation of this display is just a starting point and we expect it to evolve significantly - so if you have suggestions or feedback about it, please let us know!

 

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

Host Environments:
  • Added preliminary support for Visual Studio 2015 (Visual Studio 14.0). Note that as this version of Visual Studio does not support Visual Studio add-ins, the Visual Studio add-in used in previous versions of Visual Lint has been re-implemented as a VSPackage for use with this version of the IDE. Note that when Visual Studio 2015 starts the Visual Lint toolbar may not show the correct state of each command until the VSPackage has been loaded by invoking one of its commands, as Visual Studio 2015 does not seem to handle autoloading packages correctly.

    Visual Studio 2015 projects can of course also be analysed using the standalone versions of Visual Lint (VisualLintGui and VisualLintConsole).
     
  • Use of the Visual Studio plug-in within the Visual Studio 6.0 and eMbedded Visual C++ 4.0 development environments is now deprecated, and as such the plug-in no longer self-registers with these environments. If required however the plug-in can still be manually registered for use with Visual Studio 6.0 and/or eMbedded Visual C++ 4.0 by registering VisualLint.dll as an add-in from the "Tools | Customize" dialog within the corresponding development environment.

    Visual C++ 6.0 and eMbedded Visual C++ 4.0 projects will continue to be fully supported by the standalone versions of Visual Lint (VisualLintGui and VisualLintConsole).
     
  • The Eclipse plug-in now shows the state (checked, enabled, disabled etc.) of its commands on the main toolbar/menubar.
     
  • Added support for user defined projects (.vlproj files) to make it simpler for users to analyse arbitrary project types. The .vlproj file format is a straightforward .ini file based format designed for hand editing - see Custom project file (.vlproj) format for details.
     
Analysis Tools:
  • Added additional PC-lint 9.0 indirect files to the installer.
     
  • Added env-rb.lnt (a custom PC-lint indirect environment file which defines the preferred format for PC-lint raw analysis results) to the installer.
     
Configuration:
  • Added an option to enable the generation of PC-lint stack usage reports (the +stack directive) to the "Command Line" options page. The option must be enabled to make use of the new Stack Usage Display. [Visual Lint Professional and Enterprise Editions]
     
  • Added an option to enable the generation of PC-lint program information reports (the +program_info directive) to the "Command Line" options page. [Visual Lint Professional and Enterprise Editions]
     
  • If the folder specified for a new PC-lint options.lnt indirect file in the Configuration Wizard does not exist, the Configuration Wizard will now attempt to create it.
     
  • Changing the PC-lint installation folder on the "Analysis Tool" Options page now automatically sets the help file/manual pathname.
     
  • Generated PC-lint project indirect files now include the text "This is an automatically generated file. DO NOT EDIT" in the file banner.
     
Analysis:
  • Optimised the analysis task implementation to speed up the analysis of codebases returning a large volume of analysis results.
     
  • Added support for PC-lint 9.0 stack usage reports (the +stack directive). [Visual Lint Professional and Enterprise Editions]
     
  • Added support for PC-lint 9.0 program information reports (the +program_info directive). [Visual Lint Professional and Enterprise Editions]
     
  • Generated XgConsole (IncrediBuild) command lines now only include the /UseIDEMonitor switch if the analysis is running within Visual Studio. [Visual Lint Enterprise Edition]
     
User Interface:
  • Added a new Stack Usage Display to display the results of a PC-lint stack usage report. This display is PC-lint specific. [Visual Lint Professional and Enterprise Editions]
     
  • Added Line/Column Number, Analysis status, Issue Count and Read Only/Writeable indicators to the VisualLintGui statusbar.
     
  • Added an optional long line marker to VisualLintGui.
     
  • Added a "Find in Files" command and associated dockable "Find Results" toolwindow to VisualLintGui.
     
  • Added a "Reset Window Layout" command to VisualLintGui.
     
  • Added accelerators to the VisualLintGui Help | Documentation (F1) and Help | Analysis Tool Documentation (Shift + F1) commands.
     
  • Added informational text to the Active Analysis Tool Dialog.
     
  • Added a "Troubleshooting | View Project Indirect File" command to the Analysis Status Display context menu. The command is available if PC-lint is the active analysis tool and allows the contents of the PC-lint project indirect file corresponding to the selected project or file to be inspected for diagnostic purposes. Note: these files are automatically generated, so any changes made to them manually are likely to be discarded when the project is reloaded or analysed unless the file is marked read only (in which case Visual Lint will not attempt to overwrite them).
     
  • Added a "Troubleshooting | Save Preprocessed File As..." command to the Analysis Status Display context menu. The command is available if PC-lint is the active analysis tool and generates a preprocessed copy of the selected file using the PC-lint -p option.
     
  • To support the analysis of projects described by .vlproj files, a new "Custom" environment type has been added to the Configuration Wizard and "Analysis Tool" Options pages.
     
  • Folder/filename controls in the Configuration Wizard, Options Dialog etc. now support direct editing and drag-drop.
     
  • The VisualLintGui code editor "Open Referenced File" context menu command can now open PC-lint indirect (.lnt) and header (.h) files referenced within an indirect file such as std.lnt (the latter using the -header() directive), as well as indirect files referenced from within a header file using the -indirect() directive.
     
  • The VisualLintGui code editor "Open Referenced File" context menu command now shows the full pathname of the referenced filename if it can be located. Otherwise, the filename given in the directive will be shown and the command disabled.
     
  • Revised the logic used to determine which instance of a shared file to display the analysis results for when a file is opened. Files with "Completed" analysis status are now given the highest priority, and "Excluded" lowest.
     
  • Revised the default window layout in VisualLintGui.
     
  • The Manual Analysis Dialog now centres itself with respect to the main window of the host environment.
     
  • Updated the appearance of the AboutBox.
     
  • Updated the icon of the VisualLintGui Status Log View.
     
  • Tidied up the layout of the VisualLintGui "Find" dialog.
     
  • The "Help" button in the Configuration Wizard now launch the corresponding page in the helpfile. Also added Help buttons to various other dialogs and removed the "What's This?" help buttons made redundant as a result.
     
  • Added help topics for the VisualLintGui Find/Replace dialogs and Find Results View.
     
Bug Fixes:
  • The Manual Analysis Display now applies the current global display filter to the issue count displayed during analysis. [Visual Lint Enterprise Edition]
     
  • Improved the persistence of the current selection of the "Configure for" controls on the Configuration Wizard "Tools" page "Analysis Tool" Options pages.
     
  • Icons used within Visual Lint displays now reflect the current system defined icon sizes rather than being hardcoded to 16x16, 32x32 etc.
     

It goes without saying that we welcome any feedback you can offer on the new version.

Download Visual Lint 5.0.0.244


Posted by Anna at 13:25 | 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

 

PC-lint 9.00l has been released
Wednesday, October 29, 2014

Gimpel have just released PC-lint 9.00l - which looks to be a pretty important update to PC-lint 9.0 over the previous build (9.00k). You can download patch itself and updated versions of the corresponding support files from the PC-lint 9.0 patch page.

This update significantly improves MISRA and C++ 11 support, so if you are using MISRA, have C++ 11 code or are using Visual Studio 2012 onwards this is very much a recommended update.

Some C++ 14 features (e.g. binary literals and digit separators) are also now supported if the -A(C++2014) option is active. Details of the major changes included in the patch are available at http://www.gimpel.com/html/pub90/read90.txt, from which the relevant extracts are reproduced below:

          * This patch contains significantly enhanced support for MISRA
            C3 (MISRA C 2012).  A number of new messages to support MISRA
            C3 have been added and the au-misra3.lnt author file has been
            updated accordingly.  We now provide some level of support
            for all but 3 of the decidable rules and 4 of the undecidable
            rules, with full support being provided for the vast majority
            of the rules.

          * We have broken out the 1960/1963 diagnostics (used to support
            MISRA C++) into individual messages to provide a greater level
            of control and flexibility, especially with regards to message
            suppression.  The 1960/1963 messages will continue to be
            supported for backwards compatibility.  A new author file,
            au-misra-cpp-alt.lnt, can be used to take advantage of the
            new messages in place of the 1960/1963 messages.

          * We have improved support for MISRA C 2004, namely with regards
            to rules #8.8, #6.2, and #8.9.

          * We have improved support for MISRA C++, namely with regards to
            rules #7-3-1, #9-6-2, and #9-6-4,

          * We now provide significantly improved support for VS2012
            through an updated co-msc110.lnt file, available on our
            patches page.

          * Patch 9.00L introduces support for range-based for statements,
            the 'final' class specifier, standard layout types, improved
            handling of null pointer constants, significantly improved
            handling of C++11 core language features used in Visual Studio
            2012 headers.  As with other C++ 2011 features, these are
            available using the option: -A(C++2011).

          * We now support binary literals and digit separators from
            C++14.  These features are available using the option:
            -A(C++2014).

          * We now support the use of message numbers and patterns with
            the +efreeze/-efreeze and ++efreeze options.  For example,
            ++efreeze(534) will prevent later-appearing options from
            suppressing message 534 without affecting the frozen status
            of other messages.

          * We now support C11's _Static_assert (when using -A(C2011)).

          * The Program Info facility now includes flags for indicating
            when a function has been declared with the final or override
            specifiers and when a class has been declared with final.

          * Multiple '-deprecate()' options can now be used to combine
            deprecation messages. Such joined messages appear separated
            by commas.  For example:

              -deprecate(function, printf, Directive #2SFH)
              -deprecate(function, printf, Recommendation #LCD1C)

            would result in

              Warning 586: variable 'printf' is deprecated. Directive
                     #2SFH, Recommendation #LCD1C

            whenever 'printf()' is called.


          Disenhancements:

          We have decided to disable strong type deduction as it was
          responsible for incorrect type deduction in certain cases that did
          not involve strong types.  This feature will be revisited in a
          future release.
        

Full details of the bugfixes also included in the patch (the contents are too long to list here!) are available at http://www.gimpel.com/html/pub90/bugfix90.txt.

Note that from our own experience running beta versions of this update some additional suppression directives for warnings 1509 and 1510 may be required to prevent unnecessary warnings being generated by classes derived from those within frameworks such as ATL and WTL.

We are in the process of updating our own indirect files to include appropriate suppression directives, but if you find you need assistance with specific occurances (or have suppression directives you think we should include in our files) please let us know.

As the update also adds quite a few new PC-lint messages we will also be updating the PC-lint message database installed with the next Visual Lint build (4.5.6.233).


Posted by Anna at 17:20 | Get Link

 

Agile on the Beach 2014 - #agileotb
Thursday, September 4, 2014

This week we are exhibiting at the Agile on the Beach Conference in Falmouth.

Agile on the Beach

If you weren't able to make it here, a glance at the #agileotb Tweet stream for the event should give a feel for the event:

I will be presenting a lunchtime session titled "Agile Warning Policies" just after lunch. Slides will be uploaded here soonish!


Posted by Anna at 11:19 | Get Link

 

Agile Warning Policies on the Beach
Tuesday, September 2, 2014

We're going to the Beach. Are you...?

Our founder Anna is presenting a talk titled "Agile Warning Policies" at the Agile on the Beach conference this Thursday lunchtime. If you are going to the conference, we'll see you there!

If you want to follow the conference on Twitter, the hashtag to watch is #AgileOTB.


Posted by Anna at 22:19 | Get Link

 

Office Move
Friday, July 4, 2014

We have finally moved! Our new office is located within Platinum House - a serviced office complex in central Bournemouth, located less than 300 metres from the beach (very convenient for ice cream, sunbathing and surfing, if any of them are your thing).

Our new office is within Platinum House in central Bournemouth

Cool location aside, Platinum House (formerly the Kingshott Business Centre) has the usual officey things like a reception with comfy chairs, photocopiers, meeting rooms and (most importantly for any tech outfit) free coffee.

Our new registered office address is:

    Platinum House
    23 Hinton Road
    Bournemouth
    Dorset BH1 2EF
    United Kingdom

The change should be transparent, but please ensure that any purchase orders you place with us in the future reference the new address rather than the old one. Needless to say, any snail mail should also be sent to the new address.


Posted by Anna at 16:34 | Get Link

 

Visual Studio "14" CTP - good news, and bad news
Thursday, July 3, 2014

Microsoft have just released a Community Technical Preview (CTP) of Visual Studio "14" (the next version of Visual Studio), so naturally we have been taking a look.

Visual Studio '14' CTP

At first glance, the changes are incremental (which is surely a good thing for the developer community after the UI fiasco of the Visual Studio 2012 release). Of particular note are the changes to Visual C++ and the "C" runtime library - see Visual Studio "14" CTP and C Runtime (CRT) Features, Fixes, and Breaking Changes in Visual Studio 14 CTP1.

However, there is (for us, at least) one very significant change - Visual Studio "14" does not support add-ins, which will prevent many third party plugins from loading - including (unfortunately) both ResOrg and Visual Lint. As a result, we are currently undertaking a feasibility study to determine how much work is required in order to port the Visual Lint and ResOrg plug-ins from the add-in format to the VSPackage format (a lower level but far more flexible type of plug-in which is still supported by VS14).

Needless to say this is a major effort which introduces significant risk and additional complexity (we still have to maintain both add-ins for compatibility with earlier versions of Visual Studio...), but fortunately it is one we have already done some preparatory work towards. It is however a major distraction from other things we planned to do this year (thanks Microsoft!) so no doubt that will have consequences elseware in our development efforts. On the plus side, moving to the VSPackage format will eventually make supporting Atmel Studio (which uses the Visual Studio shell) somewhat easier.

You can get an idea of the sort of changes required to convert an add-in to a VSPackage from the blog post Strategies migrating from Visual Studio add-ins to packages. The fact that the Visual Studio automation interfaces (which are used by add-ins) are still (for now, at least) fully functional in a VSPackage environment helps, but in the long term moving away from them will probably be a good idea as Carlos suggests in the blogpost linked to above. However, for now that is unnecessary change and therefore undesirable.

I can't speak for other vendors but I can say that we started looking at this in detail as soon as we had the CTP installed a month ago. In the time since then we have been able to prototype a new ResOrg VSPackage which is almost fully functional and is helping us to identify and mitigate risk areas. There is still a lot of work to do before this can be released, but so far the signs are good.

Once ResOrg has been dealt with we hope to be able to port Visual Lint in the same manner (though as a more complex codebase it will probably take significantly longer to address). Either way, we hope to have the work complete by the Autumn.

In the meantime, ResOrg can load Visual Studio "14" projects already, and we have already made the changes necessary to allow development builds of Visual Lint to analyse Visual Studio "14" projects in VisualLintGui and VisualLintConsole. These changes are minor and can easily be merged back into the release (v4.5) branch as soon as needed.

The bottom line? Based upon previous Visual Studio releases we do not expect Visual Studio "14" to be publicly released in RTM (Release to Manufacturing) form until at least the end of the year. By then, we would hope that we will also have production ready builds of the ResOrg and Visual Lint plug-ins which are fully compatible with the new version of the IDE.

But it's still completely unnecessary work. Thanks, Microsoft.


Posted by Anna at 10:48 | 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

 

ResOrg 2.0.4.20 has been released
Thursday, December 19, 2013

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

  • Added support for Visual Studio 2010 and 2012 themes. Toolwindow colour settings are now automatically refreshed after a new theme is activated via the Theme|<name> (VS2010) or Tools|Change Color Theme (VS2012) theme editor commands.

    Note that changing the active theme via other commands in the theme editor may not result in the new theme being acted upon, as internal theme editor commands do not source events visible to third party plug-ins.
     
  • Added support for Visual Studio 2013.
     
  • If the user attempts to open file or solution which no longer exists via one of the ResOrgApp MRU lists, an error message is now displayed and the orphaned item removed.
     
  • Added MDI tabs to ResOrgApp.
     

Posted by Anna at 14:41 | Get Link

 

LintProject Pro 2.5.5.26 has been released
Friday, Jun 7, 2013

This is a maintenance update for LintProject Pro 2.5. The following changes are included:

  • Added support for makefiles where the compiler location is explicitly specified rather than located via the system path [from Visual Lint 4.0.4.202].
     
  • Built-in compiler preprocessor symbols are now automatically included in the analysis configuration for makefile projects using GCC based compilers [from Visual Lint 4.0.4.202].
     
  • Fixed a bug in the Visual Studio 2010/2012 project (.vcxproj) file parser which affected project files which use $(MSBuildProjectDirectory) to reference the location of an external property (.props) file [from Visual Lint 4.0.4.202].
     
  • Fixed a bug which could prevent details of system includes for GNU makefile projects from being written to generated PC-lint project indirect files [from Visual Lint 4.0.4.202].
     
  • Updated the documentation for PC-lint messages 166, 510, 516, 829, 1009, 1085, 1962 and 1963 [from Visual Lint 4.0.4.202].
     
  • Added documentation for PC-lint message 142 ("case constant 'String' used previously in this switch") [from Visual Lint 4.0.4.202].
     
  • LintProjectPro can now export analysis results data in user defined formats specified using an external configuration file [from Visual Lint 4.0.3.200].
     
  • Duplicated analysis issues are now filtered out from the data written to export files written using the /exportfile switch [from Visual Lint 4.0.3.200].
     
  • Various modifications for compatibility with solutions (e.g. the WDK "Toaster" sample) in which two projects share the same name [from Visual Lint 4.0.3.200].
     
  • Fixed a bug in the querying of available CppCheck analysis issues via the --errorlist switch [from Visual Lint 4.0.3.200].
     
  • Relative pathnames within Cppheck and PC-lint analysis issues are now expanded to fully qualified pathnames for inclusion in reports and file exports.
     

Posted by Anna at 12:57 | 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

 

PC-lint compiler options files for Visual Studio 2012
Wednesday, November 28, 2012

Since Visual Studio 2012 was released we have been using the compiler options files for Visual Studio 2010 (co-msc100.lnt and co-msc100.h) when analysing code for it as a set for VS2012 was not available.

For the most part that works fine, however it does mean that code which checks _MSC_VER etc. to invoke conditional behaviour may not analyse correctly in some cases.

We have now submitted dedicated PC-lint 9.0 compiler options files for Visual Studio 2012 (co-msc110.lnt and co-msc110.h) with the correct values for these symbols as given by the Visual Studio 2012 RTM. The co-msc110.lnt file also includes some suppression directives for Visual Studio 2012 unit tests.

In due course they will become available in new PC-lint 9.0 installations and via the PC-lint 9.0 patch page, however for the time being Gimpel have made them available from the PC-lint 9.0 beta page at http://gimpel.com/html/90beta/.

Incidentally the current PC-lint 9.0 beta version (9.00i2) looks like it contains some fairly significant changes to MISRA, PCH and function call side effect analysis - so that is a pretty good indication of what to expect in the next public version (PC-lint 9.00j).

Details of the changes in PC-lint 9.00i2 are available at http://gimpel.com/html/90beta/fixes.txt.


Posted by Anna at 09:39 | 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 http://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