我正在使用Visual Studio 2017的集成在Windows子系统Linux中本地构建和调试CMake Linux应用程序。
运行应用程序时,Visual Studio使用与localhost的ssh连接来运行cmake -DCMAKE_BUILD_TYPE="Debug" ..
和make
,然后使用gdbserver
来调试应用程序。这适用于我的应用程序自己的代码,包括断点和逐行调试。
此应用程序链接到库文件libhypro.so.17.09
,该文件也是CMake项目的一部分。这个库也是在本地构建的(存储在我的Windows文件系统中,在Linux中通过/mnt/c/
mount构建,就像主应用程序一样)在调试模式下。 CMake确实自动发现了依赖。
我在调试此库的调用时遇到问题。例如,如果我在调用库代码之前中断并选择 Step Into ,那么这就是我最终的结果:
请注意
[Unknown/Just-In-Time compiled code]
,此外,我确实在库的代码中设置了一个断点,Visual Studio(正确)断言“断点当前不会被命中”。此外,Debug输出打印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无法调试库的代码?
答案 0 :(得分:3)
如果您在gdbserver
模式下进行调试(默认情况下),请尝试在项目属性/调试页面中切换到gdb
模式。
基本上,gdbserver
模式是一个很好的想法,从来没有完全交付。这是一个discussion about it on the VCLinux GitHub site。正如您所看到的,gdb
一旦修复了控制台应用程序的问题,它将成为默认的调试模式。