To properly debug with Visual Studio, it's recommended that you use a debug build.
Follow the instructions for building Inkscape on Windows
and substitute the first cmake
command with:
cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
If you've already built Inkscape, I recommend creating the debug build in a new directory. Otherwise it'll overwrite files and cost you time when you want a release build again.
If you do build it in the same directory, you might need to delete CMakeCache.txt
for it to work.
In Visual Studio, open the Inkscape project folder as a folder:
Once you have it open, go to the Solution Explorer
, click Show All Files
:
And navigate to inkscape.exe
(should be under build/inkscape/bin/inkscape.exe
).
Right click it, and select Add Debug Configuration
:
Then choose C/C++ Launch for MinGW/Cygwin (gdb)
:
This will open up launch.vs.json
with a default config.
Modify it to look like this (adjust paths based on your configuration if needed):
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "cppdbg",
"name": "inkscape.exe",
"project": "build\\inkscape\\bin\\inkscape.exe",
"projectTarget": "",
"cwd": "${workspaceRoot}",
"program": "build\\inkscape\\bin\\inkscape.exe",
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",
"externalConsole": true
}
]
}
To debug, right-click inkscape.exe
again in the Solution Explorer
and press Debug
:
I could not find any other way to successfully start the debugger.
To make sure everything works, I recommend going to src/inkscape-main.cpp
and setting a breakpoint at the first
line of the main
function.
That way, you'll know whether it works as soon as it launches, and won't need to wait for the Inkscape GUI to show.
The above is sufficient for debugging with Visual Studio, but there's a bit more we can do. We can trigger a build from VS, and we can better integrate with IntelliSense.
To configure a build, right-click the top-level inkscape directory in the Solution Explorer
and choose Configure Tasks
:
Replace the file contents with the following:
{
"version": "0.2.1",
"tasks": [
{
"taskLabel": "Build-All",
"taskName": "Build-All",
"appliesTo": "/",
"type": "launch",
"contextType": "build",
"workingDirectory": "${workspaceRoot}/build",
"command": "cmd.exe",
"args": [ "..\\build-all.bat" ]
}
]
}
And add build-all.bat
to your project root with the following contents:
mkdir build
cd build
C:\msys64\msys2_shell.cmd -defterm -no-start -ucrt64 -here -c "cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja .."
C:\msys64\msys2_shell.cmd -defterm -no-start -ucrt64 -here -c ninja
C:\msys64\msys2_shell.cmd -defterm -no-start -ucrt64 -here -c "ninja install"
With those steps done, you can right-click the inkscape
directory again and select Build
to build it.
This is based on Visual Studio's CMake integration. I managed to make it configure, build, and install Inkscape. Debugging may be possible, but after several hours I haven't managed it.
Create a CMakeSettings.json
file in the root directory of the project, and add the following contents:
{
"configurations": [
{
"name": "Mingw64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeExecutable": "${env.BIN_ROOT}/cmake",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": "",
"inheritEnvironments": [ "mingw_64" ],
"environments": [
{
"INSTALL_ROOT": "${projectDir}/out/install/Mingw64-Debug",
"MINGW64_ROOT": "C:/msys64/ucrt64",
"BIN_ROOT": "${env.MINGW64_ROOT}/bin",
"MINGW_CHOST": "x86_64-w64-mingw32",
"MINGW_PREFIX": "${env.MINGW64_ROOT}",
"MINGW_PACKAGE_PREFIX": "mingw-w64-ucrt-x86_64",
"MSYSTEM": "UCRT64",
"MSYSTEM_CARCH": "x86_64",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "13.2.0",
"PATH": "${env.MINGW64_ROOT}/bin;${env.MINGW64_ROOT}/../usr/local/bin;${env.MINGW64_ROOT}/../usr/bin;${env.MINGW64_ROOT}/../bin;${env.PATH}",
"INCLUDE": "${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION};${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION}/tr1;${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION}/${env.FLAVOR}",
"SHELL": "/usr/bin/bash",
"environment": "mingw_64"
}
],
"variables": [
{
"name": "CMAKE_C_COMPILER",
"value": "${env.BIN_ROOT}/cc.exe",
"type": "STRING"
},
{
"name": "CMAKE_CXX_COMPILER",
"value": "${env.BIN_ROOT}/c++.exe",
"type": "STRING"
}
],
"intelliSenseMode": "linux-gcc-x64",
"cmakeToolchain": ""
}
]
}
This is more or less configuring all the environment variables you'll find in your ucrt64
shell.
You'll also notice that this is a Debug
build.
For a release build, you can copy this and change configurationType
to Release
.
With this, VS should successfully configure the CMake project.
If you right-click the CMakeLists.txt
file, you can choose to Build
or Install
it:
With the output going to the configured directories:
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
If you select Debug
it will fail, and I don't know how to remedy that.
While researching this, I read the following. They may prove useful if you're having issues.