【发布时间】:2018-04-04 02:15:00
【问题描述】:
我正在使用 Visual Studio 2017 的集成在适用于 Linux 的 Windows 子系统中本地构建和调试 CMake Linux 应用程序。
运行应用程序时,Visual Studio 使用 ssh 连接到 localhost 来运行 cmake -DCMAKE_BUILD_TYPE="Debug" .. 和 make,然后使用 gdbserver 调试应用程序。这适用于我的应用程序自己的代码,包括断点和逐行调试。
此应用程序链接到库文件 libhypro.so.17.09,它也是 CMake 项目的一部分。这个库也是在本地构建的(存储在我的 Windows 文件系统中,通过/mnt/c/ 挂载在 Linux 中构建,就像主应用程序一样)在调试模式下。 CMake 确实自动发现了这种依赖关系。
我在调试对该库的调用时遇到问题。例如,如果我在调用库代码之前中断并选择Step Into,这就是我结束的地方:
注意
- 调用堆栈已消失,改为显示
[Unknown/Just-In-Time compiled code], - 我处于一个未处理的异常中(我希望最终会遇到该异常,但肯定不会在 Step Into 之后立即发生)并且
- Modules 窗口显示没有可用的符号。
此外,我确实在库的代码中设置了一个断点,Visual Studio(正确地)断言“断点当前不会被命中”。此外,调试输出打印Loaded '/mnt/c/Users/felix/git/hypro/build/libhypro.so.17.09'. Cannot find or open the symbol file.
我比较确定libhypro.so.17.09确实包含调试符号,因为nm -gC libhypro.so 打印很多的输出。
我的情况似乎类似于this question,但我没有手动指定库的路径,它是由 CMake 发现的。
为什么 gdb 以及 Visual Studio 无法调试库的代码?
【问题讨论】:
-
你是在
gdbserver模式下调试吗?如果是这样,请尝试切换到gdb模式。 -
我愿意,切换到
gdb确实有帮助!现在,符号显示为已加载,当单步执行时,Visual Studio 要求我定位源文件。你知道为什么切换到gdb会有帮助吗? -
另外,您介意将其发布为答案以便我接受吗?
标签: c++ gdb visual-studio-2017 remote-debugging visual-studio-debugging