Visual C++ for Linux 1.0.5 Updates
We recently posted new bits for our 1.0.5 release of the Visual C++ for Linux extension for Visual Studio 2015. This release has some major performance improvements that feature incremental copy and build, and considerably reducing the number of connections to the remote Linux machine. We’ve also made significant improvements in IntelliSense since our last post here.
- Makefile project template
- Remote source copy management
- Overridable C/C++ compiler path
- New debugging options
Makefile Project Template
A Makefile project template has been added that supports using external build systems on your remote machine (make, gmake, CMake, bash script etc.). This works as you would expect under the C++ project property pages you can set your local Intellisense paths, then on the remote build property page you add the commands, semicolon separated, to trigger your build on the remote machine. In the example here I’m switching to my remote directory with my build script and then executing it.
I’ve thrown together some bash scripts that can generate our makefile project with your sources based on the directory structure. These scripts do assume that the source code on the Linux machine is in a directory that has been mapped to Windows. They do set the new flag in the project properties to not copy files remotely. These are unlikely to meet all needs but should give you a good starting point if you have a large project.
Remote file copy management
We also made it possible to specify at the file and project level whether or not a file should be remotely copied. This means you can use your existing build mechanisms just by mapping your existing sources locally and adding them to your project for editing and debugging.
Overridable C/C++ Compiler Path
You can now override the compiler commands used on the remote machine in the Property Pages. That will enable you to point to specific versions of GCC if needed or even point to an alternate compiler like clang. You can use either full paths or a command available on your path.
Under Build Events node of the project properties there are also new pre-build and pre-link remote build events as well as options for arbitrary file copy in all build events to provide greater flexibility.
New Debugging Options
There have also been improvements in debugging. We added a new gdb mode to improve compatibility where we may not have the correct client gdb bits on Windows for the remote target.
You can also override the debugger command itself, this is useful for debugging external programs compiled outside of VS.
The Debugging Property Page has support now for additional gdb commands to be passed to the debugger to run when starting debugging. One example of where this can come in handy is Azure IoT projects. If you’ve used the Azure IoT C SDK on the Raspberry Pi you may have run into seeing an illegal exception being thrown when you start debugging. This is caused by some interactions between libcrypto and gdb. You can find some discussion of this issue here. While debugging can continue you can avoid this error by passing an instruction to the debugger before it starts, in this case “handle SIGILL nostop noprint”.
We want to hear from you!
In addition to our support email alias, vcpplinux-support, VC++ for Linux has a public issue list on GitHub. This is a great option for having public discussion or reporting bugs. We have added our backlog for the extension here as well. You can see what we are targeting for a release by looking at the milestone tagged to an issue. There are a few we’ve committed for 1.0.6 already.
So please do follow our GitHub issue list and use it by either submitting feedback or +1 existing feedback there. We love hearing about how and where our extension is being used. Feel free to use our support email alias if you want to share that with us even if you don’t have any issues. You can also find me on Twitter @robotdad.
We look forward to hearing from you.
Change lists for release since last post
- Major performance improvements with incremental copy and build, and considerably reducing the number of connections
- Makefile project support for external build system support (make, CMake etc)
- Over ridable C/C++ compiler path in Property Pages
- Remote source copy management per file/project: no copy, and/or override destination path
- Debug command override, useful for debugging external programs
- Pre-build and pre-link remote build events
- Arbitrary file copy as part of the build events
- Over ridable timeouts through project for command execution, compile, link and archiver.
- Add elements to project file under <PropertyGroup Label=Globals> to override default value of 30 minutes. Values are:
- RemoteExecuteTimeout, RemoteCompileCommandTimeout, RemoteLdCommmandTimeout, or RemoteArCommmandTimeout
- Debugging Property Page support for additional gdb commands for the debugger to run before starting debugging (debugger bootstrap commands)
- Linux console hang during infinite loops bug fix
- Default to IPv4 when using hostnames
- Custom local/remote ports ignored bug fix
- Linker error parsing updates
- Fixed ““” escaping issue
- Connection manager uname -m, machine arch parsing bug fix
- Remote project directory is set to a system directory bug fix
- MIEngine bits moved up to Update 3
- Bug fix for new source files in empty projects
- Added clean support
- Fixes bugs in remote target changes not triggering new build required
- Use first successful connection, instead of last successful, as the default connection
- General performance improvements
- Major IntelliSense fixes
- New experimenal debugging mode, gdb over the shell, which offers greater compatibility