mac编程的debug工具

Chisel是一个加强LLDB调试能力的小插件.主要特点在于辅助界面开发调试时在控制台以尽可能直观的方式查看界面的元素和情况.为我们梳理视图,控制器以及类关系层级.以及一些临时的界面调试变动进行快捷响应.它的作者来自于Facebook团队.得益于开源,让我们来观摩和了解一下这个东东到底有什么用处. 它是一个开源的 LLDB 插件合辑,这会使调试变得更加有趣。

LLDB

LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。

你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值?

NSLog(@"%@", whatIsInsideThisThing);

或者跳过一个函数调用来简化程序的行为?

NSNumber *n = @7; // 实际应该调用这个函数:Foo();

或者短路一个逻辑检查?

if (1 || theBooleanAtStake) { ... }

或者伪造一个函数实现?

int calculateTheTrickyValue {
  return 9;
  /*
   先这么着
   ...
}

并且每次必须重新编译,从头开始?

构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。

但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。

这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。

LLDB 和 Python

LLDB 有内建的,完整的 Python 支持。在LLDB中输入 script,会打开一个 Python REPL。你也可以输入一行 python 语句作为 script 命令 的参数,这可以运行 python 语句而不进入REPL:

(lldb) script import os
(lldb) script os.system("open http://www.objc.io/")

这样就允许你创造各种酷的命令。把下面的语句放到文件 ~/myCommands.py 中:

def caflushCommand(debugger, command, result, internal_dict):
  debugger.HandleCommand("e (void)[CATransaction flush]")

然后再 LLDB 中运行:

command script import ~/myCommands.py

或者把这行命令放在 /.lldbinit 里,这样每次进入 LLDB 时都会自动运行。Chisel 其实就是一个 Python 脚本的集合,这些脚本拼接 (命令) 字符串 ,然后让 LLDB 执行。很简单,不是吗?

紧握调试器这一武器

LLDB 可以做的事情很多。大多数人习惯于使用 p,po,n,s 和 c,但实际上除此之外,LLDB 可以做的还有很多。掌握所有的命令 (实际上并不是很多),会让你在揭示代码运行时的运行状态,寻找 bug,强制执行特定的运行路径时获得更大的能力。你甚至可以构建简单的交互原型 - 比如要是现在以 modal 方式弹出一个 View Controller 会怎么样?使用调试器,一试便知。

这篇文章是为了想你展示 LLDB 的强大之处,并且鼓励你多去探索在控制台输入命令。

打开 LLDB,输入 help,看一看列举的命令。你尝试过多少?用了多少?

但愿 NSLog 看起来不再那么吸引你去用,每次编辑再运行并不有趣而且耗时。

 

转载于:https://www.cnblogs.com/welhzh/p/4285700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenOCD是一个开源的调试和编程工具,用于与嵌入式系统进行通信和调试。当我们在gdb中输入设置断点指令时,OpenOCD会起到关键的作用。它通过与目标设备进行通信,提供了与目标设备的连接和控制功能,使得我们可以在目标设备上进行调试操作。 调试步骤通常包括以下几个步骤: 1. 打开两个终端,一个用于运行OpenOCD,另一个用于执行调试操作。在Windows系统中,可以使用PowerShell或者cmd终端。在Linux和Mac系统中,也可以使用相应的终端。 2. 在第一个终端中,运行OpenOCD命令,指定配置文件的路径。例如,可以使用以下命令来启动OpenOCD: ``` openocd -f D:\OpenOCD\share\openocd\scripts\interface\stlink-v2.cfg -f D:\OpenOCD\share\openocd\scripts\board\stm32f4discovery.cfg ``` 这个命令会根据指定的配置文件来初始化OpenOCD,并与目标设备建立连接。 3. 在第二个终端中,可以使用gdb等调试工具来进行调试操作。通过与OpenOCD建立的连接,可以在目标设备上设置断点、查看寄存器状态、单步执行等操作,以便进行调试。 需要注意的是,安装OpenOCD时需要将其安装路径添加到环境变量中,以便在任何位置都可以直接使用OpenOCD命令。可以从https://gnutoolchains.com/arm-eabi/openocd/下载OpenOCD,并将其解压到固定位置。 总之,OpenOCD在调试过程中起到了关键的作用,通过与目标设备进行通信和控制,实现了对目标设备的调试操作。 #### 引用[.reference_title] - *1* [openocd的源码学习0-----利用gdb和openocd对riscv芯片进行debug的总体框图](https://blog.csdn.net/qq_41735476/article/details/120417082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [利用openocd 在windows环境下GDB调试(调试器 stlinkv2)STM32](https://blog.csdn.net/chunyexixiaoyu/article/details/120448515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值