当前位置: 首页 > news >正文

clang+llvm多进程gdb调试

clang+llvm多进程gdb调试

  • 前言
  • 1. 命令行gdb
  • 2. 父进程调试
  • 3. 子进程调试
  • 4. 返回父进程

前言

在学习新增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
在这里插入图片描述

2. 父进程调试

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

3. 子进程调试

follow-fork-mode的解释是:

ebugger 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,具体组合用途如下:
在这里插入图片描述
在本案例的使用中,需要设置成child+off模式:

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

在这里插入图片描述

4. 返回父进程

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

(gdb) info inferiors
(gdb) inferior 1

在这里插入图片描述

http://www.lryc.cn/news/239590.html

相关文章:

  • PHP反序列化简单使用
  • 专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享
  • 数据结构与算法编程题11
  • 【LeetCode刷题】--40.组合总和II
  • mysql面试内容点
  • msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法
  • 数字图像处理(冈萨雷斯)学习笔记
  • MES系统管理范围及标准
  • vscode运行dlv报错超时
  • 【Leetcode合集】1. 两数之和
  • 使用Java解决快手滑块验证码
  • 瑞吉外卖Day06
  • 从暗黑3D火炬之光技能系统说到-Laya非入门教学一~资源管理
  • for,while,until语句
  • Apache POI简介
  • 基于Qt的UDP通信、TCP文件传输程序的设计与实现——QQ聊天群聊
  • 【C++】:STL中的string类的增删查改的底层模拟实现
  • 【论文阅读笔记】Supervised Contrastive Learning
  • 数据库管理工具,你可以用Navicat,但我选DBeaver!
  • 数据库的三范式(Normalization)
  • 【代码随想录】刷题笔记Day32
  • LeetCode算法题解(动态规划,背包问题)|LeetCode416. 分割等和子集
  • Java Class 类文件格式看这一篇就够了
  • 『亚马逊云科技产品测评』活动征文|构建生态农场家禽系统
  • [github配置] 远程访问仓库以及问题解决
  • mysql5.6 删除用户/ drop user
  • VMware三种网络模式
  • Java虚拟机(JVM)的调优技巧和实战2
  • 2020年下半年试题一:论信息系统项目的成本管理
  • 9. 回文数 --力扣 --JAVA