Using Visual Studio to develop Linux apps

This tutorial demonstrates how to build and debug Linux applications using Visual Studio.

To proceed with the tutorial you will need a Windows machine and a Linux machine. You can use 2 physical computers, a Windows computer running Linux inside VirtualBox/VMWare or vice versa.

To create, build and debug a simple Linux app using VisualGDB, please follow these steps:

  1. Please download and install the latest VisualGDB.
  2. On your Windows machine start Visual Studio, select “File->New project”. Then select “VisualGDB->Linux Project Wizard”. Specify project location and press “OK”.01-linuxprj
  3. The VisualGDB Linux Project Wizard will start. As we are making a simple “Hello, World” application, keep “Create a new project” selected and press “Next”.02-make
  4. If you have not created any projects before, select “Create a new SSH connection” on the next page.03-newssh
  5. Provide the host name, user name and password. It is recommended to check the “setup public key” checkbox, so that VisualGDB will automatically generate an public/private keypair, store it in your Windows account’s key container and setup the remote Linux machine to use it. 03-connIf you don’t enable public key authentication, VisualGDB will remember your password for this connection. The stored passwords are encrypted using a key stored in your Windows account. Thus, the password will only be available once you login using your Windows account.
  6. If you want to use a different toolchain (e.g. LLVM), you can select if from the toolchain list. The button to the right of the toolchain list allows customizing individual tools, such as the compiler. devvmYou can also select a cross-compiler here or specify a different deployment machine. Use the diagram at the bottom of the page to check the correctness of your setup:
    • ┬áThe hammer icon corresponds to the machine where the compiler is run.
    • The “play” icon corresponds to the machine where the debugged program is launched.
  7. When you press “Next”, VisualGDB will test your toolchain by trying to compile and run a trivial program. If any errors are detected at this stage, you will see a detailed error log with further troubleshooting information.test
  8. As the same source code will be edited under Windows and then compiled under Linux, VisualGDB will need to keep the sources synchronized. The easiest way is to use automatic file uploading via SSH. Alternatively, VisualGDB can setup shared folders (that would require root password).07-transfer
  9. Press Finish to complete the wizard. If you are setting up your first project using this Linux machine, VisualGDB will make local caches of the include directories to make them available through IntelliSense.08-includecache
  10. Congratulations! The project has been created. You can now build your project, set a breakpoint on the “cout” line and start debugging with
  11. You can always change various debugging settings by right-clicking at the project in Solution Explorer and selecting “VisualGDB Project Properties”. The properties window allows changing various settings and also copying settings between configurations. Use the search field on the left to find settings by keywords:settings
  12. VisualGDB uses GNU make to build your project. You can easily customize various GCC settings, such as additional include directories or compiler flags, on the Makefile Settings page of VisualGDB Project Properties:makeOnce you click “Apply” or “OK”, VisualGDB will automatically check the new settings and update IntelliSense configuration accordingly.
  13. You can also right-click inside Visual Studio menu bar and enable the VisualGDB toolbar. It provides shortcuts to commonly used functionality (e.g. changing the program arguments for next launch): argc
  14. Note that when you add further source files to the project, the Makefile will be updated automatically next time you build the project in Visual Studio:makefile
  15. VisualGDB 5.0 and later includes a Clang-based IntelliSense engine that supports GNU C/C++ extensions, such as struct initializers:sense
  16. It also supports refactoring features like “Create from use” and detailed C/C++ code map:refactor

That was it for the basic project. If you want a more advanced example, see our ImageMagick tutorial.