clang+llvm多进程gdb调试

clang+llvm多进程gdb调试

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

前言

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

1. 命令行gdb

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

bash 复制代码
clang -flegacy-pass-manager -mllvm -sub -mllvm -sub_loop=1 -mllvm -sub_name=sum mvc.o simple.c -o simple

单步调试的命令为:

bash 复制代码
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模式:

bash 复制代码
(gdb) set follow-fork-mode child
(gdb) set detach-on-fork off

4. 返回父进程

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

bash 复制代码
(gdb) info inferiors
(gdb) inferior 1
相关推荐
漫步企鹅4 天前
【GDB】调试程序的基本命令和用法(Qt程序为例)
开发语言·qt·gdb·调试
Golinie3 个月前
【C++高并发服务器WebServer】-1:Linux中父子进程fork创建及关系、GDB多进程调试
linux·c++·gdb·fork·webserver·高并发服务器
利刃大大3 个月前
【Linux入门】2w字详解yum、vim、gcc/g++、gdb、makefile以及进度条小程序
linux·c语言·vim·makefile·gdb·gcc
努力的CV战士3 个月前
C语言gdb调试
c语言·开发语言·gdb
每天敲200行代码3 个月前
Linux开发工具--vim编辑器-gcc/g++编译器-gdb调试器
linux·c++·编辑器·vim·gdb
HIT_Weston4 个月前
19、【OS】【Nuttx】【Python】gdb调试优化,python实现构建脚本
python·gdb·os·nuttx
KevinRay_4 个月前
Linux系统编程深度解析:C语言实战指南
linux·c语言·mfc·gdb
Octopus20774 个月前
【linux】gdb
linux·服务器·笔记·学习·gdb
XiaoCCCcCCccCcccC5 个月前
Linux环境下的基础开发工具 -- 包管理器,vim,gcc/g++,make/makefile,git,gdb/cgdb
linux·c语言·gdb
shimly1234565 个月前
(done) gdb 在系统编程中的调试技巧
gdb