嵌入式linux开发板gdbserver+vscode可视化断点调试

安卓板子

请移步https://www.cnblogs.com/chenshao107/p/18548660

gdb和gdbserver

一般来说进行,进行嵌入式linux开发时,都会从开发板厂商拿到sdk,里面的工具链就有可用的gdb和gdbserver,所以一般是不需要自己去编译的。常见的比如,如果你用的工具链是arm-linux-gnueabihf-gcc,那你一般能找到arm-linux-gnueabihf-gdb……
可以在对应工具链的目录下find -name gdbserver

找不到的话,顶多也就交叉编译个gdbserver

硬要自己编译gdbserver

https://sourceware.org/gdb/download/
在前者链接里下载你想要的gdb版本,解压后交叉编译gdbserver

export PATH=$PATH:/tools/toolchain/gcc-10.2.1-20210303-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm

./configure --prefix=`pwd`/__install --host=arm-linux \
     CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ \
      LD=arm-linux-gnueabihf-ld AR=arm-linux-gnueabihf-ar

make
make install

这里的命令只是参考,因为我并不需要源码编译,编译过程中有错误需要自己搜索寻找解决办法,同时还要检测gdbserver二进制是否生成,因为你并不需要整个gdb项目交叉编译完,你仅仅只是需要gdbserver可执行文件。

编译需要调试的程序

在编译过程中添加-g -O0即可。(并且不要被strip,一般没啥问题)单纯linux的板子一般问题不多,因为用的都是gnu,如果实在怀疑调试的符号信息有问题的话,查看一下我的这篇博客https://www.cnblogs.com/chenshao107/p/18548660

gdbserver启动服务

板子连上网络,tftp将gdbserver推进板子。

./gdbserver   :1234  demo
或者
./gdbserver :1234 --attach $pid

别忘了给gdbserver和要调试的二进制添加执行权限。chmod +x gdbserver

vscode连接gdbserver

安装ms-vscode.cpptools拓展,名称: C/C++。由于许多人其实更喜欢使用clangd,C/C++插件占用太多,我后续再看能不能使用其他插件。

点击vscode左边的"运行与调试",添加launch.json,选择cppdbg。
参考配置文件如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Remote Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "可执行文件的路径(注意,不是板子上的路径)",
            "miDebuggerServerAddress": "板子ip:1234",
            "miDebuggerPath": "arm-linux-gnueabihf-gdb(选择自己工具链的gdb,绝对路径也行)",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

vscode提前打开对应的.c文件打打断点,点击“运行与调试”界面左边的小绿三角即可连接上了。

so库的调试

如果要调试代码中调用的so库,so库也要添加-g -O0的编译选项,同时有可能需要手动加载so库的调试符号,比如在调试控制台执行file xx.so?目前我只在安卓使用lldbserver成功过,以后有机会再尝试。

posted @   任侠平生愿  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示