您的位置 首页 > 数码极客

〔如何用vs调试程序〕vs调试时无法启动程序

现在,你可以在Visual Studio中使用[Attach to Process]功能来使用GDB或者LLDB附加一个远程进程。在Visual Studio 2019的时候,我们就已经添加了一项对附加到远程GDB调试系统上的进程的支持。在最新版本的Visual Studio 2022 预览版3中,我们继续添加了对附加LLDB调试进程的支持,下面我们来具体看看。

Visual Studio中的远程调试功能对于团队开发来说特别有用,特别是当开发团队需要编写能够在Windows,Linux或者macOS上运行的跨平台代码的时候。举个例子,如果你使用Windows + Visual Studio作为你的主要开发环境,然后你可能需要在一台Linux或者macOS系统上调试你的代码。你可以直接使用Visual Studio中的远程调试功能来直接进行远程调试,而不需要切换到目标系统上使用命令行来进行GDB或者LLDB调试。Visual Studio自带的远程C++调试组件会假定你的源代码位于本机Windows文件系统中。

虽然以一种原生的,面向命令行驱动的工作流程可能对于开发团队来说也许是最佳选择,但是我们通过反馈得知:
> 有些开发团队对于平台特定的工具不是很熟悉,尤其是他们已经熟悉了Windows + Visual Studio作为主开发环境的情况下。
> 有些开发团队更加倾向于使用图形化界面进行代码调试,而不希望使用命令行。
> 在目标系统和开发环境系统中来回切换,不是那么高效。
> 有些开发团队依靠那些熟悉命令行工具的开发人员来调试所有非Windows错误,他们希望使代码调试能让更多的开发人员所熟练使用。

接下来我们看看如何使用Visual Studio 2022来远程调试一个LLDB附加的进程。

操作步骤

1. 在Windows上,安装Visual Studio 2022 预览版3。
2. 在远程系统上,安装LLDB和LLDB-mi。在macOS上,你可以安装XCode LLDB或XCode 命令行工具。你可以安装一个由VS Code C/C++扩展所维护的LLDB-mi组件。
我们目前没有维护Linux版本的LLDB-mi二进制版本。你可以从C/C++扩展中的iamWing所给出的步骤来安装LLDB和LLDB-mi。
3. 在远程系统上,执行SSH并启动你希望调试的进程。
4. 在Windows上,打开Visual Studio 2022,并选择菜单中的[Debug > Attach to Process…]。
> 设置[Connection type] 为 SSH。
> 设置[Connection target]。你可以在Visual Studio的Connection Manager中选择任意一家添加的目标系统。或者提供一个新的目标系统的地址和登录账号来添加一个新的系统连接。
> 设置为 Native(LLDB)。如果你使用GDB来进行远程调试,请将code type设置为Native(GDB),如下图所示:


> [list of available processes]会列出目标系统中的所有进程名称和ID。选择你希望调试的进程然后点击[Attach]即可将进程附加到调试器,如下图所示:

5. Visual Studio将会附加LLDB到你选择的进程,并开始调试会话。你可以直接暂停调试并设置当前执行点。所有在Visual Studio中支持的调试窗口都可以在远程调试中继续使用,如以往一样。

总结

我一直没有学会GDB的命令行调试,这次Visual Studio引入图形化界面,代替了命令行,对于我这种人来说,的确是太棒了。
终于舒坦了。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新的开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Attach to a Remote Process with LLDB in Visual Studio 2022 Preview 3》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

</