Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

    • 编程语言

    • 开发工具

    • 前端调试

    • 浏览器原理

      • V8 执行引擎

        • Devtools Console 面板输入了 1+1 ,浏览器内部发生了什么?
        • V8源码解析之Array.prototype.sort
        • V8源码解析之String.prototype.indexOf
        • VSCode 调试 V8 源码
        • 浅谈 V8 的垃圾回收
        • macOS 上使用 lldb 和 gdb
          • 背景
          • gdb 安装与签名
          • gdb 调试命令
          • gdb 调试-实例分析
          • gdb 与 vscode
          • peda 插件:增强 gdb 的显示
          • lldb 使用
            • chisel 插件:增强 lldb 的显示
          • 参考文档
        • 从「消失的 1 千粉丝」谈及 toFixed 的坑
      • 渲染机制

    • 浏览器生态

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

  • 业务场景

  • 大前端
  • 前端基础
  • 浏览器原理
  • V8 执行引擎
gahing
2020-06-22
目录

macOS 上使用 lldb 和 gdb

# 背景

在尝试调试 JS 引擎的时候,发现需要用到这些工具

其中 v8 用 gdb, JavaScriptCore 用 lldb

macOS 版本: 10.15

先来说说 gdb 的使用吧

# gdb 安装与签名

brew install gdb
gdb -v
# 9.2
1
2
3

网上有说什么高版本有坑的需要下特定版本的,反正我暂时没遇到

上面安装完后还会输出以下信息(很关键)

gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/BuildingOnDarwin

On 10.12 (Sierra) or later with SIP, you need to run this:

  echo "set startup-with-shell off" >> ~/.gdbinit
1
2
3
4
5
6
7
8

安装完需要进行签名,否则会报类似以下的错误

Starting program: /x/y/foo
Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
1
2
3

网上大部分文章 (opens new window)讲的都是 10.14 之前的做法,按之前的做法还是会签名失败。

可以看上面输出的地址 -- https://sourceware.org/gdb/wiki/BuildingOnDarwin ,里面讲了如何解决这个问题。

sudo killall taskgated
codesign -fs gdb_codesign "$(which gdb)"
1
2

# gdb 调试命令

权当记录


list(l) # 查看程序代码
回车 # 表示执行上一条命令
start(s) # 开始执行程序
run(r) #从头开始调试
quit(q) #退出程序
next(n) #单步执行
step(s) #进入函数
backtrace(bt) #查看函数调用栈帧 结果显示: #0 xxx #1 xxx
frame(f) x #选择 x 号栈帧

info(i) locals #查看变量信息
info(i) breakpoints #查看断点信息
info(i) watchpoints #查询观察点

print(p) x #输出变量 x 的值
finish #将程序运行到当前函数返回
continue(c) #将程序运行到结束或者断点处
set var 变量=XX #进行变量赋值
display 变量 #追踪变量值,每次执行(next)都会对追踪变量进行输出显示
undisplay 编号 #取消追踪

break(b) 行号/函数名 <条件语句> #设置断点
delete breakpoints 断点编号  #删除断点,没带断点编号则删除所有断点
disable breakpoints 断点编号 #禁用断点
enable 断点编号 #启用断点

#观察点是当程序访问某个存储单元时中断
watch arr[4] # 访问arr[4] 时中断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# gdb 调试-实例分析

gcc test.c -g -o test
gdb test
1
2

GDB调试工具总结 (opens new window) 这篇文章举了几个例子,并一步步教命令怎么使用,建议阅读,这里就不重复了。

# gdb 与 vscode

利用命令进行调试,对于新手来说有点麻烦,那么用 vscode 来进行调试就是一个不错的选择

需要先安装 c/c++ 插件

启动调试,此时需要一个启动的 json 文件

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "gcc - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/test",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "build"
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

等价于 gdb test

test 是我们要调试的程序,再执行之前我们需要先编译链接生成它,所以又创了一个任务 build

版本不一样,配置也不一样,根据系统提示的进行创建

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "gcc test.c -g -o test.o"
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12

# peda 插件:增强 gdb 的显示

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
1
2

# lldb 使用

https://lldb.llvm.org/

与 gdb 命令的映射 (opens new window)

# chisel 插件:增强 lldb 的显示

brew install chisel
echo "command script import /usr/local/opt/chisel/libexec/fblldb.py" >> ~/.lldbinit
1
2

# 参考文档

  • GDB调试工具总结 (opens new window)
  • PermissionsDarwin (opens new window)
编辑 (opens new window)
#V8
上次更新: 2024/09/01, 23:56:56
浅谈 V8 的垃圾回收
从「消失的 1 千粉丝」谈及 toFixed 的坑

← 浅谈 V8 的垃圾回收 从「消失的 1 千粉丝」谈及 toFixed 的坑→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式