【问题标题】:Vulkan validation layers debugging on macOS在 macOS 上调试 Vulkan 验证层
【发布时间】:2018-06-30 22:54:12
【问题描述】:

我正在尝试使用 LunarG 的适用于 macOS 的 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 加载程序、熔体 vk 库、层和 icd 的清单文件)。我刚刚添加了环境。 Xcode 中的变量(VK_ICD_FILENAMES,VK_LAYER_PATH),因此它们指向随 sdk 和层变量指向层文件夹的熔体的 icd 清单文件。我尝试使用调试配置自己构建层,所以我的 VK_LAYER_PATH 指向层构建文件夹,其中是清单文件。使用此设置,当我运行我的应用程序时,一切正常,加载了图层并且正确调用了我的调试回调。但是当我尝试进入图层时没有任何反应,看起来 xcode 找不到图层的符号。我想那没关系,但后来我尝试将 VK_LAYER_PATH 设置为指向我也构建的 cubepp 演示项目中的层构建文件夹。然后我能够进入层代码,这让我认为 xcode 找不到符号可能不是问题。但是,我对 cubepp CMakeLists.txt 进行了一些更改,以查找我的项目中可能缺少的属性,但是在这些更改之后,即使我恢复了对 CMakeLists 的更改,我也无法再次进入层代码。我猜这可能是一些 XCode 问题,或者我缺少一些 @rpath 等设置,但这些东西以及 macOS 平台对我来说都是新的。任何想法我应该如何设置它才能正常工作?

谢谢

【问题讨论】:

    标签: xcode macos cmake vulkan


    【解决方案1】:

    请记住,当您尝试从应用程序单步执行层时,您必须先单步执行加载程序,因为加载程序位于您的应用程序和层之间。我怀疑您的捆绑应用程序链接到了一个没有调试符号的加载程序,这就是您无法进入它的原因。

    cubepp 工作的原因是因为它可能(通过 rpath)链接到一个可调试的加载器。

    我取得了一些成功:

    • 在调试模式下从 KhronosGroup/Vulkan-ValidationLayers 存储库构建层
    • 在我的 XCode 项目方案中将 VK_LAYER_PATH 设置为此 repo 的层构建目录
    • 在 Xcode 中设置符号断点(例如,libVkLayer_core_validation.dylib 中的 CreateInstance)

    这会导致 XCode 在调试器中停止并显示该层的完整源代码。

    另一种方法是将您的应用程序与构建为可调试的加载器链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      相关资源
      最近更新 更多