C++ 使用Visual Studio调试库代码';s的Linux支持

C++ 使用Visual Studio调试库代码';s的Linux支持,c++,gdb,visual-studio-2017,remote-debugging,visual-studio-debugging,C++,Gdb,Visual Studio 2017,Remote Debugging,Visual Studio Debugging,我正在使用Visual Studio 2017的集成在Windows Linux子系统中本地构建和调试CMake Linux应用程序 运行应用程序时,Visual Studio使用到本地主机的ssh连接来运行cmake-DCMAKE\u BUILD\u TYPE=“Debug”。和make,然后使用gdbserver调试应用程序。这适用于我的应用程序自己的代码,包括断点和逐行调试 此应用程序链接到一个库文件,libhypro.so.17.09,它也是CMake项目的一部分。这个库也是在调试模式下

我正在使用Visual Studio 2017的集成在Windows Linux子系统中本地构建和调试CMake Linux应用程序

运行应用程序时,Visual Studio使用到本地主机的ssh连接来运行
cmake-DCMAKE\u BUILD\u TYPE=“Debug”。
make
,然后使用
gdbserver
调试应用程序。这适用于我的应用程序自己的代码,包括断点和逐行调试

此应用程序链接到一个库文件,
libhypro.so.17.09
,它也是CMake项目的一部分。这个库也是在调试模式下本地构建的(存储在我的Windows文件系统中,通过
/mnt/c/
挂载在Linux中构建,就像主应用程序一样)。CMake确实自动发现了这种依赖性

调试对此库的调用时遇到问题。例如,如果我在调用库代码之前中断,并选择单步执行,则我的结果是:

注意

  • 调用堆栈已消失,显示的是
    [未知/即时编译代码]
  • 我在一个未处理的异常中(我希望最终会遇到这个异常,但肯定不会在进入后立即遇到),并且
  • “模块”窗口表示没有可用的符号
此外,我在库的代码中设置了一个断点,VisualStudio(正确地)断言“当前不会命中断点”。此外,调试输出输出打印
load'/mnt/c/Users/felix/git/hypro/build/libhypro.so.17.09'。无法找到或打开符号文件。

我相对确定
libhypro.so.17.09
确实包含调试符号,如
nm-gC libhypro.so
打印了大量输出

我的案例与类似,但我没有手动指定库的路径,它是由CMake发现的


为什么
gdb
而Visual Studio又无法调试库的代码?

如果您在默认的
gdbserver
模式下调试,请尝试在项目属性/调试页面中切换到
gdb
模式


基本上,
gdbserver
模式是一个不错的想法,但从未完全实现过。这里有一个。如您所见,
gdb
一旦解决了控制台应用程序的问题,将成为默认调试模式。

您是否在
gdbserver
模式下调试?如果是这样的话,试着切换到
gdb
模式。我这样做了,切换到
gdb
确实有帮助!现在,符号显示为已加载,当进入时,VisualStudio要求我查找源文件。您知道为什么切换到
gdb
会有帮助吗?另外,您介意将此作为答案发布,以便我可以接受吗?