我正在试用适用于macOS的LunarG vulkan SDK。到目前为止一切都很好。但是,在调试验证层时,我很费力,因为我找不到解决方案以升级到层代码以对其进行调试。我有简单的CMake设置,对于非常简单的项目,除了查询层,扩展和类似的东西外,基本上什么都不做。这是我的顶级CMakeLists.txt:
cmake_minimum_required(VERSION 3.7)
project(TestApp)
find_package(vulkan REQUIRED)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(MACOS_APPLICATION_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/Demo.cpp
${CMAKE_CURRENT_SOURCE_DIR}/main.mm
${CMAKE_CURRENT_SOURCE_DIR}/Application.mm
${CMAKE_CURRENT_SOURCE_DIR}/DemoViewController.mm
)
set(MACOS_APPLICATION_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/Demo.h
${CMAKE_CURRENT_SOURCE_DIR}/Application.h
${CMAKE_CURRENT_SOURCE_DIR}/DemoViewController.h
)
set(MACOS_APPLICATION_RESOURCES
${CMAKE_CURRENT_SOURCE_DIR}/Main.storyboard
)
add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
include_directories(./)
add_executable(TestApp MACOSX_BUNDLE
${MACOS_APPLICATION_HEADERS}
${MACOS_APPLICATION_SRCS}
${MACOS_APPLICATION_RESOURCES})
target_link_libraries(TestApp Vulkan::Vulkan "-framework AppKit -framework QuartzCore")
set_target_properties(TestApp PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)
set_source_files_properties(${MACOS_APPLICATION_RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources"
)
我正在创建捆绑的应用程序,但是现在我不在捆绑中存储任何资源(vulkan loader,meltvk lib,用于层和icd的清单文件)。我刚刚添加了环境。 Xcode中的变量(VK_ICD_FILENAMES,VK_LAYER_PATH),因此它们指向sdk和layers变量随附的melt的icd清单文件,并指向layers文件夹。我尝试使用Debug配置自己构建图层,所以我的VK_LAYER_PATH指向清单文件所在的图层构建文件夹。通过这种设置,当我运行我的应用程序时,一切正常,加载了层并且正确调用了我的调试回调。但是,当我尝试进入图层时,什么也没发生,好像xcode找不到图层的符号。我猜那没关系,但是后来我尝试将VK_LAYER_PATH设置为指向我也已构建的cubepp演示项目中的图层构建文件夹。然后,我能够进入分层代码,这使我认为xcode找不到符号可能不是问题。但是,我对cubepp CMakeLists.txt进行了一些更改,以查找我的项目中可能缺少的属性,但是在更改之后,即使我将更改恢复为CMakeLists,也无法再次进入层代码。我猜这可能是XCode问题,或者我缺少一些@rpath等设置,但是这些东西以及macOS平台对我来说都是新的。有什么想法我应该如何设置才能正常工作?
谢谢
答案 0 :(得分:0)
请记住,当尝试从应用程序进入各层时,您必须首先逐步通过该加载器,因为该加载器位于应用程序和各层之间。我怀疑您捆绑的应用程序链接到了没有调试符号而构建的加载程序,这就是为什么您无法介入其中的原因。
cubepp之所以起作用,是因为它可能(通过rpath)链接到了可调试构建的加载器。
我在以下方面取得了一些成功
这将导致XCode停止在调试器中并显示该层的完整源代码。
另一种方法是将您的应用程序与可调试构建的加载器链接。