系统相关
首页 > 系统相关> > c-使用Visual Studio的Linux支持调试库代码

c-使用Visual Studio的Linux支持调试库代码

作者:互联网

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

运行应用程序时,Visual Studio使用与本地主机的ssh连接来运行cmake -DCMAKE_BUILD_TYPE =“ Debug” ..并生成,然后使用gdbserver调试应用程序.这对于我的应用程序自己的代码(包括断点和逐行调试)非常有效.

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

我在调试对该库的调用时遇到问题.例如,如果我在调用库代码之前中断并选择“进入”,这就是我要结束的地方:

screenshot from Visual Studio

注意

>调用堆栈消失了,显示了[未知/及时编译的代码],
>我处于未处理的异常中(我希望最终会发生,但肯定不会在进入步骤后立即发生),
>“模块”窗口指示没有符号可用.

另外,我确实在库的代码中设置了一个断点,Visual Studio(正确)断言“该断点当前不会被击中”.同样,调试输出会打印“已加载’/mnt/c/Users/felix/git/hypro/build/libhypro.so.17.09”.找不到或打开符号文件.

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

我的情况似乎类似于this question,但是我没有手动指定库的路径,而是由CMake发现的.

为什么gdb以及Visual Studio未能调试库的代码?

解决方法:

如果您是以默认的gdbserver模式进行调试,请尝试在项目属性/调试页面上切换到gdb模式.

基本上,gdbserver模式是一个很好的主意,但从未交付过.这是一个discussion about it on the VCLinux GitHub site.您将看到,一旦gdb解决了控制台应用程序的问题,它将成为默认的调试模式.

标签:c,gdb,remote-debugging,visual-studio-debugging,visual-studio-2017
来源: https://codeday.me/bug/20191011/1896466.html