I'm getting started with ispc (Intel SPMD Program Compiler), and I'm able to compile and run the examples provided with the distribution. What I'd like to do next is to be able to step through an .ispc
file inside the Visual Studio (or CLion) debugger.
According to the documentation, the ispc
compiler can be instructed to emit debugging symbols with the -g
option. I've added that to the provided CMakeLists.txt
, but I can't seem to get Visual Studio to actually step into an ispc function.
For example, I set a breakpoint in the simple
example here: https://github.com/ispc/ispc/blob/master/examples/simple/simple.cpp#L49
When clicking "step into", I'd expect Visual Studio to step into the definition of that function, here: https://github.com/ispc/ispc/blob/master/examples/simple/simple.ispc#L35. Instead, Visual Studio steps over and continues on with simple.cpp
.
I suspect that Visual Studio either can't locate the debugging symbols generated by the ispc
compiler, and/or doesn't know that those symbols are associated with the simple.ispc
file.
I found this blog post from last year which says, among other things:
The latest version of ispc (1.9.2) supports limited debugging with Visual Studio. Examining struct's with bool's doesn't seem to work, the locals window is very iffy but more or less works. Single stepping works. Profiling works but seems a little iffy.
So it seems clear that this is possible; I just don't know enough about how compilers, debuggers, and IDEs interact to make this happen. Does anyone know how to accomplish this?
Running Windows 10 (v1903) with Visual Studio 2017 (v15.9.17)
$ ispc --version
Intel(r) SPMD Program Compiler (ispc), 1.12.0 (build date Aug 15 2019, LLVM 8.0.0)
Supported Visual Studio versions: Visual Studio 2015 and later.
It turns out that I added the
-g
flag in the wrong place.The ISPC examples include a "master" CMake file that has a bunch of common options, called
AddISPCExample.cmake
. This file is executed for every example. Each example also includes its ownCMakeLists.txt
with its own options. I originally modifiedAddISPCExample.cmake
by adding the following line:After more closely examining the build output, it turns out that this caused the
-g
flag to be added to the MSVC compiler's flags forsimple.exe
([2/3] command below), instead of to the ispc compiler's flags forsimple.ispc
([1/3] command below):Instead, I modified the simple example's
CMakeLists.txt
by adding the-g
flag:This causes the
-g
flag to be passed to the ispc compiler's command line (in [2/3] below):Now, setting a breakpoint and stepping into the ispc file works (although the UI is a bit wonky):