我开始使用ispc (),我能够编译和运行发行版提供的示例。接下来我要做的是能够在Visual (或CLion)调试器中逐步遍历一个CLion文件。
根据文献资料,可以指示ispc编译器使用-g选项发出调试符号。我已经将它添加到了提供的CMakeLists.txt中,但我似乎无法让Visual真正进入ispc函数。
例如,我在这里的simple示例中设置了一个断点:https://github.com/ispc/ispc/blob/master/examples/simple/simple.cpp#L49
当单击"step“时,我希望Visual逐步进入该函数的定义,这里是:https://github.com/ispc/ispc/blob/master/examples/simple/simple.ispc#L35。相反,Visual将逐步完成并继续使用simple.cpp。
我怀疑Visual要么无法定位ispc编译器生成的调试符号,而且/或不知道这些符号与simple.ispc文件相关联。
我发现了去年的这篇博客文章,其中包括:
最新版本的ispc (1.9.2)支持使用Visual进行有限的调试。用bool's检查结构体似乎不起作用,本地窗口很不稳定,但或多或少地起作用了。一步一步的工作。分析工作,但似乎有点不确定。
显然,这是可能的;我只是不太了解编译器、调试器和IDE是如何相互作用的。有人知道如何做到这一点吗?
用VisualStudio2017运行Windows 10 (v1903) (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.发布于 2019-11-14 13:02:15
结果,我在错误的地方添加了-g标志。
ISPC示例包括一个“主”CMake文件,该文件有许多常见选项,称为AddISPCExample.cmake。每个示例都执行此文件。每个示例还包含自己的CMakeLists.txt和自己的选项。我最初通过添加以下行修改了AddISPCExample.cmake:
# add debug flag
target_compile_options(${example_NAME} PRIVATE -g)在更仔细地检查构建输出之后,发现这导致将-g标志添加到simple.exe编译器的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相反,我通过添加CMakeLists.txt标志来修改-g:
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有点不稳定):

https://stackoverflow.com/questions/58824275
复制相似问题