如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?
Posted
技术标签:
【中文标题】如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?【英文标题】:How to step through ispc source files in Visual Studio or CLion debugger? 【发布时间】:2019-11-12 18:03:03 【问题描述】:我开始使用ispc(英特尔 SPMD 程序编译器),我能够编译和运行随分发包提供的示例。我接下来想做的是能够在 Visual Studio(或 CLion)调试器中单步执行 .ispc
文件。
根据the documentation,可以使用-g
选项指示ispc
编译器发出调试符号。我已将其添加到提供的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 进行有限调试。用布尔值检查结构似乎不起作用,本地窗口非常不确定,但或多或少有效。单步工作。分析有效,但似乎有点不确定。
所以很明显这是可能的;我只是不太了解编译器、调试器和 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.
【问题讨论】:
【参考方案1】:原来我在错误的地方添加了-g
标志。
ISPC 示例包括一个“主”CMake 文件,该文件具有许多常用选项,称为AddISPCExample.cmake
。该文件针对每个示例执行。每个示例还包括自己的CMakeLists.txt
和自己的选项。我最初通过添加以下行修改了AddISPCExample.cmake
:
# add debug flag
target_compile_options($example_NAME PRIVATE -g)
在更仔细地检查构建输出后,事实证明这导致 -g
标志被添加到 MSVC 编译器的 simple.exe
标志(下面的 [2/3] 命令),而不是 ispc 编译器的simple.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 有点不稳定):
【讨论】:
以上是关于如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点
如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013
如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建
如何在 Visual Studio 2012(或 Resharper)中禁用 /* 自动完成