最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁.当然限于个人水平,有不当之处恳请指正.原文网址:https://blog.segger.com/getting-printf-output-from-target-to-debugger/ Erich Styger最近发布了一篇<关于如何使用ARM Cortex-M目标上的单线输出(SWO)添加控制台功能>的伟大教程…
技巧一:运行时修改变量的值 你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模式后,使用expr命令即可在运行时修改变量的值. 假如有一个loginWithUsername:方法,需要两个参数:username,password. 首先设置好断点,如下图所示: 运行app,进入断点模式后,在(lldb)后输入 ? 1 2 expr username = @"username&…
感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2  读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1  需要用汇编来排错的常见情况 汇编是CPU执行指令的最小单元.下面一些情况下,汇编级别的分析通常是必要的:1. 阅读代码看不出问题,但是跑出来的结果就是不对,怀疑编译器甚至CPU有毛病.2. 没有源代码可以阅读.比如,调用某一个API的时候出问题,没有Windows的源代码,那就看汇编.3. 当程序崩溃,访问违例的时候,调试器里看到的…
本文完全转载,转载地址:点击这里 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /*…
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? 1 if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? 1 2 3 4 5 6 int calculateTheTrickyValue {   return 9;…
工欲善其事,必先善其器.调试器在嵌入式开发调试中的重要性不言而喻,单步.断点和监察的效率远高于串口打印.但是,调试器对于一般开发人员往往是一个黑匣子.今天我们就来谈谈调试器的原理,顺便把自己的几类调试器接线和注意事项记录下来,以便查找.我常常要面对几个方案,而各个方案的调试器都不一样,接线有时连自己都记不住.所以这个帖子应值得嵌入式开发工程师收藏. 一.嵌入式调试多样性 我们先来回想调试的场景,思考一下这几个问题: 1. ARM开发环境有Keil.IAR.ADS等等,我们发现这几个平台都能用同一…
GDB调试的三种方式: 1. 目标板直接使用GDB进行调试. 2. 目标板使用gdbserver,主机使用xxx-linux-gdb作为客户端. 3. 目标板使用ulimit -c unlimited,生成core文件:然后主机使用xxx-linux-gdb ./test ./core. Brendan Gregg关于gdb介绍<gdb Debugging Full Example (Tutorial): ncurses>. 1. gdb调试 构造测试程序如下main.c和sum.c如下: m…
使用GDB: 本文描写叙述GDB,GNU的原代码调试器. (这是4.12版1994年一月.GDB版本号4.16) * 文件夹: * 摘要: GDB的摘要 * 实例: 一个使用实例 * 入门: 进入和退出GDB * 命令: GDB 的命令 * 运行: 在GDB下运行程序 * 停止: 暂停和继续运行 * 栈: 检查堆栈 * 原文件: 检查原文件 * 数据: 检查数据 * 语言: 用不同的语言来使用GDB * 符号: 检查符号表 * 更改: 更改运行 * GDB的文件 文件 * 对象 指定调试对象 *…
这里分析一个ARM板子JTAG调试器经常连接失败,只能偶尔连上目标板问题. 背景 这是原先另一个部门的板子,在部门合并之后,最近要对这个板子的代码体系进行转移,在过问开发进度时,工程师反映这个板子调试很难连接,所以错误不好定位.这个问题前段时间反映过,但是当时比较忙,没有过问.现在看起来这个问题影响问题定位了,所以看起来这个问题需要彻底看一下了.听原先负责这个板子的工程师,这些年也都是这样,这个芯片很难连接,以前如果不行就换板子.这个芯片是LPC2136,我们部门原先并不使用,但是LPC2132…
在调一块 ARM M0 内核的板子,使用官方的 DEMO 板子来调,板子上集成了 daplink 调试器. 为了方便使用,我把目标板跟 daplink 剪开了,然后用杜邦线把 daplink 跟目标板连接起来,可是,keil无法找到 MCU,不管怎么试都不行,keil 是可以找到 daplink 的,测试了 MCU 也是没问题的,后来用 daplink 接了其他 MCU,断定应该是 daplink 哪里坏了. 虽然手上有 J-link,试了下,可惜这个 J-link 不支持这个 MCU.没调试起…