本教程介绍如何在一台 Linux 机器上使用交叉编译器开发和调试构建的应用程序,然后将其部署到另一台 Linux 机器上。及在windows平台上使用 Visual Studio+VisualGDB连接Linux环境编译最后部署到嵌入式Linux机器上运行以及调试。
我们将展示如何配置 VisualGDB 在 x86 Linux 机器上构建一个简单的 Raspberry Pi 应用程序,将其部署到 Raspberry Pi 并在那里进行调试。在开始之前,请安装 VisualGDB 并确保您的 x86 Linux 机器具有arm-linux-ghueabihf交叉编译器和匹配的 gdb。
1.启动 Visual Studio 并打开 VisualGDB Linux 项目向导:
2.输入项目的名称和位置:
3.继续使用默认的“创建新项目 -> 应用程序”设置。对于大多数新项目,我们建议使用高级 CMake 项目子系统:
4.在下一页上选择“通过网络在 Linux 下构建项目”,并选择具有交叉工具链的构建计算机。然后点击“通过定位 gdb 手动指定工具链”:
5.VisualGDB 将询问 gdb 的位置。找到它并点击“打开”。在此示例中,gdb 二进制文件名为arm-linux-gnueabihf-gdb,位于/usr/bin中:
请注意,如果您通过包管理器安装了交叉工具链(例如apt install gcc-arm-linux-gnueabihf或apt install g++-arm-linux-gnueabihf),它可能不包含 gdb 可执行文件。然后,您可以通过“ apt install gdb-multiarch ”安装它,并通过“ sudo ln -s /usr/bin/gdb-multiarch /usr/bin/arm-linux-gnueabihf-gdb ”创建指向它的符号链接。
6.启用“将项目部署”到另一台 Linux 计算机复选框,然后在“部署计算机”字段中选择您的 Raspberry Pi:
7.在下一页上,选择 VisualGDB 应在 Linux 机器上存储源文件的位置。最简单的方法是继续使用默认设置,让 VisualGDB 管理源文件位置:
8.按“完成”生成您的项目。VisualGDB 将自动检测交叉工具链使用的包含目录并将它们缓存在 Windows 机器上以设置 IntelilSense:
9.现在我们将稍微修改一下项目,以便实际打印运行它的机器的主机名。将主文件的内容替换为以下内容:
#include <iostream> #include <unistd.h> using namespace std; int main(int argc, char *argv[]) { char hostname[1024] = { 0, }; gethostname(hostname, sizeof(hostname)); cout << "The host name is " << hostname << endl; //<================= Put a breakpoint here return 0; }
然后按 F5 构建您的项目并开始调试它:记得打断点 ,要不然运行完就退出了。
10.有时,构建机器无法连接到部署机器,因为它无法解析主机名,或者需要使用不同的 IP 地址。您可以通过在调试设置页面上打开 VisualGDB 项目属性并将目标选择命令切换为“ target remote <IP>:<port> ”来覆盖此问题。确保将“调试启动模式”设置为“使用‘继续’命令”:您可以通过将 GDB 会话窗口切换到“所有 GDB 交互”或“来自 GDB 的原始输出”模式,然后搜索“target”来
仔细检查 VisualGDB 用于连接目标的命令:
发表回复