如何在Visual Studio或CLion调试器中逐步浏览ispc源文件?

我开始使用ispc(英特尔SPMD程序编译器),并且能够编译和运行发行版随附的示例。我接下来要做的是能够在Visual Studio(或CLion)调试器中逐步浏览.ispc文件。

根据the documentation,可以使用ispc选项指示-g编译器发出调试符号。我已将其添加到提供的CMakeLists.txt中,但似乎无法使Visual Studio真正进入ispc函数。

例如,我在此处的simple示例中设置了一个断点:https://github.com/ispc/ispc/blob/master/examples/simple/simple.cpp#L49

单击“进入”时,我希望Visual Studio进入该函数的定义,这里为https://github.com/ispc/ispc/blob/master/examples/simple/simple.ispc#L35。相反,Visual Studio会继续并继续simple.cpp

我怀疑Visual Studio无法找到ispc编译器生成的调试符号,并且/或者不知道这些符号与simple.ispc文件相关。

我从去年发现了this blog post,其中包括:

  

最新版本的ispc(1.9.2)支持使用Visual Studio进行有限的调试。用布尔检查结构似乎不起作用,本地窗口非常混乱,但是或多或少起作用。单步工作。剖析有效,但似乎有些iff跷。

因此,显然这是可能的;我只是对编译器,调试器和IDE如何交互才能实现此目的一无所知。有人知道如何做到这一点吗?

使用Visual Studio 2017(v15.9.17)运行Windows 10(v1903)

$ 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.
aa2463 回答:如何在Visual Studio或CLion调试器中逐步浏览ispc源文件?

事实证明,我在错误的位置添加了-g标志。

ISPC示例包括一个“ master” CMake文件,该文件具有许多常用选项,称为AddISPCExample.cmake。每个示例都会执行此文件。每个示例还包括自己的CMakeLists.txt及其选项。我最初通过添加以下行来修改AddISPCExample.cmake

    # add debug flag
    target_compile_options(${example_NAME} PRIVATE -g)

在更仔细地检查了构建输出之后,结果发现这导致-g标志被添加到simple.exe的MSVC编译器标志中(以下[2/3]命令),而不是到simple.ispc的ispc编译器标志(下面的[1/3]命令):

>------ Rebuild started: Project: CMakeLists,Configuration: Debug ------
Build started 14-Nov-19 6:40:58.
RunExternalTool:
  [1/3] cmd.exe /C "cd /D "C:\Users\Daniel\CMakeBuilds\7d280c73-3384-fd31-a5a6-63248b2e8dd4\build\x64-Debug (default)\simple" && C:\bin\ispc.exe C:/Users/Daniel/Downloads/ispc-v1.12.0-windows/examples/simple/simple.ispc -O2 --target=sse2 --arch=x86-64 -h "C:/Users/Daniel/CMakeBuilds/7d280c73-3384-fd31-a5a6-63248b2e8dd4/build/x64-Debug (default)/simple/simple_ispc.h" -o "C:/Users/Daniel/CMakeBuilds/7d280c73-3384-fd31-a5a6-63248b2e8dd4/build/x64-Debug (default)/simple/simple_ispc.obj""
  [2/3] C:\PROGRA~2\MICROS~1\2017\ENTERP~1\VC\Tools\MSVC\1416~1.270\bin\HostX64\x64\cl.exe  /nologo /TP  -Isimple /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1   /fp:fast /Oi -g /showIncludes /Fosimple\CMakeFiles\simple.dir\simple.cpp.obj /Fdsimple\CMakeFiles\simple.dir\ /FS -c C:\Users\Daniel\Downloads\ispc-v1.12.0-windows\examples\simple\simple.cpp
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\cl : Command line warning D9002: ignoring unknown option '-g'
  [3/3] cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=simple\CMakeFiles\simple.dir --manifests  -- C:\PROGRA~2\MICROS~1\2017\ENTERP~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\link.exe /nologo simple\simple_ispc.obj simple\CMakeFiles\simple.dir\simple.cpp.obj  /out:simple\simple.exe /implib:simple\simple.lib /pdb:simple\simple.pdb /version:0.0  /machine:x64 /debug /INCREMENTAL /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
  LINK : simple\simple.exe not found or not built by the last incremental link; performing full link

相反,我通过添加-g标志来修改the simple example's CMakeLists.txt

set (ISPC_FLAGS -O2 -g)

这将导致-g标志被传递到ispc编译器的命令行(在下面的[2/3]中):

>------ Build started: Project: CMakeLists,Configuration: Debug ------
Build started 14-Nov-19 6:44:17.
RunExternalTool:
  [1/3] cmd.exe /C "cd /D "C:\Users\Daniel\CMakeBuilds\7d280c73-3384-fd31-a5a6-63248b2e8dd4\build\x64-Debug (default)\simple" && C:\bin\ispc.exe C:/Users/Daniel/Downloads/ispc-v1.12.0-windows/examples/simple/simple.ispc -O2 -g --target=sse2 --arch=x86-64 -h "C:/Users/Daniel/CMakeBuilds/7d280c73-3384-fd31-a5a6-63248b2e8dd4/build/x64-Debug (default)/simple/simple_ispc.h" -o "C:/Users/Daniel/CMakeBuilds/7d280c73-3384-fd31-a5a6-63248b2e8dd4/build/x64-Debug (default)/simple/simple_ispc.obj""
  [2/3] C:\PROGRA~2\MICROS~1\2017\ENTERP~1\VC\Tools\MSVC\1416~1.270\bin\HostX64\x64\cl.exe  /nologo /TP  -Isimple /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1   /fp:fast /Oi /showIncludes /Fosimple\CMakeFiles\simple.dir\simple.cpp.obj /Fdsimple\CMakeFiles\simple.dir\ /FS -c C:\Users\Daniel\Downloads\ispc-v1.12.0-windows\examples\simple\simple.cpp
  [3/3] cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=simple\CMakeFiles\simple.dir --manifests  -- C:\PROGRA~2\MICROS~1\2017\ENTERP~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\link.exe /nologo simple\simple_ispc.obj simple\CMakeFiles\simple.dir\simple.cpp.obj  /out:simple\simple.exe /implib:simple\simple.lib /pdb:simple\simple.pdb /version:0.0  /machine:x64 /debug /INCREMENTAL /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
  LINK : simple\simple.exe not found or not built by the last incremental link; performing full link

Build succeeded.

现在,设置一个断点并进入ispc文件即可(尽管UI有点奇怪):

enter image description here

本文链接:https://www.f2er.com/3115241.html

大家都在问