clang+llvm多进程gdb调试

这篇具有很好参考价值的文章主要介绍了clang+llvm多进程gdb调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在学习新增llvm的优化pass时,需要跟踪clang及llvm的调用栈。然而llvm通过posix_spawn()创建了新进程,这使得gdb调试必须有一定的技巧了。

1. 命令行gdb

以下命令通过clang调用新增优化pass(指令替换),将simple.c文件中的sum函数替换掉:

clang -flegacy-pass-manager -mllvm -sub -mllvm -sub_loop=1 -mllvm -sub_name=sum mvc.o simple.c -o simple

单步调试的命令为:

gdb --args clang -flegacy-pass-manager -mllvm -sub -mllvm -sub_loop=1 -mllvm -sub_name=sum mvc.o simple.c -o simple

实际上,在我的ubuntu下clang指向clang-13
clang gdb,gdb

2. 父进程调试

从调用栈可知,clang::driver::Command::Execute()调用了llvm::sys::ExecuteAndWait(),从而联系了clang模块和llvm模块。我们新增的优化pass正是llvm模块的代码。
clang gdb,gdb
如何才能在posix_spawn()函数创建子进程后,观察子进程的执行情况呢?

3. 子进程调试

follow-fork-mode的解释是:

Debugger response to a program call of fork or vfork

detach-on-fork的解释是:

Whether gdb will detach the child of a fork

根据下列博文https://blog.51cto.com/u_12740336/6252279,具体组合用途如下:
clang gdb,gdb
在本案例的使用中,需要设置成child+off模式:

(gdb) set follow-fork-mode child
(gdb) set detach-on-fork off

clang gdb,gdb
至此可以正常调试子进程:
clang gdb,gdb

4. 返回父进程

利用inferior命令,可以切换进程:

(gdb) info inferiors
(gdb) inferior 1

clang gdb,gdb

5. .inc文件高亮

这是一个题外话,且记载在这里。我用vscode看代码,默认时无法高亮*.inc文件,我知道在llvm工程中这个后缀的文件是作为c++语法使用的。

那么设置方法是,在vscode中点击Settings、TextEditor、Files、Associations,新增Item为*.inc、Value为cpp的项目。
clang gdb,gdb文章来源地址https://www.toymoban.com/news/detail-753449.html

到了这里,关于clang+llvm多进程gdb调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么

    MinGW(Minimalist GNU for Windows)是一个用于 Windows平台的开发工具集 ,它提供了一组用于编译和构建应用程序的工具和库。它的目标是在Windows环境下提供一个类Unix的开发体验。 MinGW的 核心是GNU编译器集合(GCC) ,它是一个开源的编译器套件,支持多种编程语言,如C、C++和For

    2024年02月20日
    浏览(43)
  • 使用 LLVM clang C/C++ 编译器编译 OpenSSL 3.X库

    1、下载 OpenSSL 3.X 库的源代码放到待编译目录 2、解压并接入 OpenSSL 3.X 库源码的根目录 3、复制 ./Configure 一个取名为 ./Configure-clang 4、修改 ./Configure-clang 找到配置段: CC= CXX= CPP= LD= 把它们改成 CC          = \\\"/usr/bin/clang-8\\\", CXX         = \\\"/usr/bin/clang++-8\\\", CPP         = \\\"/usr/bin/

    2024年02月02日
    浏览(47)
  • github, git, google: clang-前端插件-给各种无花括号的“块”加花括号-基于llvm15--clang-plugin-add-brace-----google镜像

    术语约定或备忘 case起止范围: 从冒号到下一个’case’开头, 简称有: case内 、case内容 Ast: Abstract syntax tree: 抽象语法树 没插入花括号的case 若case内, 以下任一条成立,则 跳过该case 即 不会对该case内容用花括号包裹. 有#define、 有#include、 有直属变量声明、 空case、 有宏调用

    2024年02月05日
    浏览(55)
  • C++(Qt)软件调试---静态分析工具clang-tidy(18)

    更多精彩内容 👉个人内容分类汇总 👈 👉C++软件调试、异常定位 👈 现在很多人在开发中完全忽略了编译器、IDE的警告提示,这怎么可能写出稳定的程序。 clang-tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。 支持C++/C

    2024年01月23日
    浏览(38)
  • VS Code 使用 clang++ 编译,使用 cppvsdbg 或 lldb 调试的配置方法

    VS Code LLVM C/C++(用来配置 c_cpp_properties.json) CodeLLDB(如果你要用 lldb 调试,那么这个插件就需要安装,用来连接到 lldb 调试器) 我们都知道配置编译器要设置三个 json,task, launch, c_cpp_properties.json task.json 直接通过 terminal - configure default build task - C/C++: clang++.exe build active file

    2024年02月09日
    浏览(48)
  • 【gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

    目录 🌞1. 整体思路 🌞2. 准备内容 🌼2.1 配置.c文件 🌼2.2 准备测试程序 🌼2.3 GDB调试基础 🌞3. GDB调试四层二叉树 🌼3.1 测试程序分析 🌼3.2 gdb分析 🌻1. 设置断点 🌻2. 启动程序并执行到断点处 🌻3. 打印变量的值 🌻4. 单步执行 s 进入buildTree函数内部 a. 第一层:根节点赋

    2024年04月17日
    浏览(27)
  • Linux - 还不懂 gdb 调试器?(调试软件)

    当前,我们可以使用 make/makefile 来程序化执行代码文件;可以使用 gcc/g++ 等编译器来编译代码;可以使用 vim 编辑器来编写代码;其实在 Linux 当中还有一个工具,可以实现调试工作,这个工具就是 -- gdb。 在了解调试器之前,你应该对代码的发布版本做一些了解: 我们在 VS

    2024年02月07日
    浏览(52)
  • GDB调试基础知识

    GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境, GDB 是 Linux 和许多类 Unix 系统中的标准开发环境。 一般来说, GDB 主要帮助你完成下面四个方面的功能: 启动程序,可以按照自定义的要求随心所欲的运行程序。 可让被调试的程序在所指定的

    2024年02月16日
    浏览(37)
  • Linux: GDB 调试工具

      目录 概念: Linux 下 debug 和 release 的区别: GDB 的使用 :  激活和进入工作模式:  查看文件的内容: 运行调试的文件:  打断点:   查看断点: 删除断点: 禁用断点: ​编辑 重新打开断点:  逐过程 与 逐语句: 查看变量/监视功能:  常显示:  运行至下一个断点

    2024年02月19日
    浏览(38)
  • GDB调试

    1.1 调试前的准备 用gcc/g++编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加 -g 的参数。 1.2 基本调试命令 2.1 什么是core文件? core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,用于对程序

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包