建站行业现状探讨,海口建设公司网站,云南公司网站制作,合肥房产网最新楼盘clangllvm多进程gdb调试 前言1. 命令行gdb2. 父进程调试3. 子进程调试4. 返回父进程 前言
在学习新增llvm的优化pass时#xff0c;需要跟踪clang及llvm的调用栈。然而llvm通过posix_spawn()创建了新进程#xff0c;这使得gdb调试必须有一定的技巧了。
1. 命令行gdb
以下命… clangllvm多进程gdb调试 前言1. 命令行gdb2. 父进程调试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_loop1 -mllvm -sub_namesum mvc.o simple.c -o simple单步调试的命令为
gdb --args clang -flegacy-pass-manager -mllvm -sub -mllvm -sub_loop1 -mllvm -sub_namesum 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具体组合用途如下 在本案例的使用中需要设置成childoff模式
(gdb) set follow-fork-mode child
(gdb) set detach-on-fork off4. 返回父进程
利用inferior命令可以切换进程
(gdb) info inferiors
(gdb) inferior 1