如何使用VisualStudio+cmake调试C++ dll

l0oc07j2  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(223)

我正在尝试使用不属于解决方案的外部应用程序调试dll。我使用的是VisualStudio+cmake。我已经使用类似以下内容设置了launch.vs.json:

{
  "version": "0.2.1",
  "defaults": {},1
  "configurations": [
    {
      "name": "mydll.dll",
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "mydll.dll",
      "program": "external_program.exe",
      "args": [ "path_to_input_file" ]
    }
  ]
}

它不起作用。正确的方法是什么?

z31licg0

z31licg01#

您需要该程式库的符号来两柴,或者必须在建置程式库时附加两柴符号(例如两柴dll)。之后,您可以“附加到载入dll的行程序”。how to attach to a process

xqk2d5yq

xqk2d5yq2#

我认为VS_DEBUGGER_COMMANDVS_DEBUGGER_COMMAND_ARGUMENTS属性可以满足您的需要。
使用MSVC,以下cmake项目将生成一个mydll.dll库,该库在调试时将运行C:/path/to/external_program C:/path/to/mydll.dll

cmake_minimum_required(VERSION 3.12)
project(mydll)

find_program(EXTERNAL_PROGRAM NAMES external_program)
if(NOT EXTERNAL_PROGRAM)
    message(FATAL_ERROR "Could not find external_program")
endif()

add_library(mydll SHARED source1.c)
set_target_properties(mydll
    PROPERTIES
        VS_DEBUGGER_COMMAND "${EXTERNAL_PROGRAM}"
        VS_DEBUGGER_COMMAND_ARGUMENTS "$<TARGET_FILE:mydll>"
)

若要创建MSVC项目,请从包含上述CMakeLists.txt的目录中运行以下命令。这将配置CMake项目,并打开Visual Studio。

cmake -S . -B build -DEXTERNAL_PROGRAM="C:/path/to/external_program.exe"
cmake --open build

因为external_program.exe是外部代码,所以您需要enable debugging of external sources。这可以通过以下方式完成:

- In the Tools -> Options -> Debugging options
  - Disable Just My Code: This will allow the debugger to attempt to locate symbols for code outside your solution.

相关问题