Как пройти через исходные файлы ispc в отладчике Visual Studio или CLion?
Я начинаю работать с ispc (компилятор программ Intel SPMD) и могу скомпилировать и запустить примеры, поставляемые с дистрибутивом. Что я хотел бы сделать дальше, так это иметь возможность пройти через.ispc
файл внутри отладчика Visual Studio (или CLion).
Согласно документации,ispc
компилятору можно дать указание выдавать символы отладки с помощью -g
вариант. Я добавил это к предоставленномуCMakeLists.txt
, но я не могу заставить Visual Studio действительно перейти к функции ispc.
Например, я установил точку останова в simple
пример здесь: https://github.com/ispc/ispc/blob/master/examples/simple/simple.cpp
При нажатии кнопки "шагнуть" я ожидаю, что Visual Studio перейдет к определению этой функции, здесь: https://github.com/ispc/ispc/blob/master/examples/simple/simple.ispc. Вместо этого Visual Studio переходит и продолжаетsimple.cpp
.
Я подозреваю, что Visual Studio либо не может найти символы отладки, сгенерированные ispc
компилятор и / или не знает, что эти символы связаны с simple.ispc
файл.
Я нашел это сообщение в блоге за прошлый год, в котором, среди прочего, говорится:
Последняя версия ispc (1.9.2) поддерживает ограниченную отладку с помощью Visual Studio. Изучение структуры с помощью bool, похоже, не работает, окно местных жителей очень сомнительно, но более или менее работает. Одношаговые работы. Профилирование работает, но кажется немного ненадежным.
Кажется очевидным, что это возможно; Я просто недостаточно знаю о том, как компиляторы, отладчики и IDE взаимодействуют, чтобы это произошло. Кто-нибудь знает, как это сделать?
Запуск Windows 10 (v1903) с 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.
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
Вместо этого я изменил простой пример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 работают (хотя пользовательский интерфейс немного шаткий):