现在位置: 首页 > 软件调试
2016-08-11 06:24 工业·编程 ⁄ 共 4165字 暂无评论
看了看linux 2.6 kernel的源码,下面结合代码来分析一下在X86体系结构下,互斥锁的实现原理。 1. 首先介绍一下互斥锁所使用的数据结构: struct mutex { atomic_t  count;     // 引用计数器 1: 锁可以利用。 小于等于0:该锁已被获取,需要等待 spinlock_t  wait_lock;    // 自旋锁类型,保证多cpu下,对等待队列访问是安全的。 struct list_head wait_list;  ...
阅读全文
在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据。 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。 转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头。该起始序列称为控制序列引导符(C...
阅读全文
2016-08-01 22:37 工业·编程 ⁄ 共 1569字 暂无评论
看法一: 一、在使用上 由 ss 与 esp 组成的栈结构已经可以算是硬件栈了,它们的 pop/push 行为都是由处理器去维护了。 软件栈:软件可以自己定义一个数据结构,pop/push 行为需由软件去维护,如:栈顶和栈底、栈空和栈满等的维护。 二、从物理上 若要从物理上去定义硬件栈结构,恐怕只有 X86 才有真正的硬件栈结构。那就是 x86 独特的浮点寄存器堆结构: 由 FR0 ~ FR7 浮点寄存器组成的一个浮点寄存栈结构。栈指针是:x87 的 s...
阅读全文
2016-07-22 23:11 工业·编程 ⁄ 共 16549字 暂无评论
1.       GDB与GCC等其他GNU工具以前,构成了程序开发调试不可缺少的一环. 2.       GDBSERVER源码架构如下: a)         Gdbserver代码简单,本身支持serial或tcp连接 b)         源码位于 gdb/gdbserver下 c)         Server.c...
阅读全文
2016-07-21 23:08 工业·编程 ⁄ 共 882字 暂无评论
  在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性。       GDB调试器当然也支持这一特性,但是功能更加灵活和丰富。       GDB将当前函数的栈帧编号为0,为外层函数的栈帧依次加1,这些编号将成为一些GDB命令的参数,以指明将要操作的是哪一个函数的栈帧。       GDB还支持使用Address...
阅读全文
2016-07-20 23:05 工业·编程 ⁄ 共 2912字 暂无评论
    在调试程序的过程中,可以自由地查看相关的源代码(如果有源代码的话)是一项最基本的特性。       一些IDE在这方面做得相当好,GDB当然也提供了这项特性,虽然不如IDE直观,但在一定程度上要比IDE更加灵活和快捷。       GDB之所以能够知道对应的源代码,是因为调试版的可执行程序中记录了源代码的位置;因为源代码的位置在编译之后可能会移动到其它地...
阅读全文
2016-07-17 22:47 工业·编程 ⁄ 共 1481字 暂无评论
一、gdb简介 gdb:GNU debugger UNIX及UNIX-like下一个强大的命令行的调试工具 gdb调试的整体架构如下图所示: 可以发现gdb调试不管是本地调试还是远程调试,都是基于ptrace系统调用来实现的 二、ptrace ptrace系统调用的原型: long ptrace(enum __ptrace_request request, pid_t pid,void *addr,void *data); ptrace系统调用提供了一种方法,让父进程可以观察和控制其它进程的执行,检查和改变其核心映像及寄存...
阅读全文
2016-07-14 22:33 工业·编程 ⁄ 共 5658字 暂无评论
在对嵌入式进行调试之前,必须要生成调试器。经典地,Linux平台下的调试器为gdb。 1、下载gdb: 下载地址为: http://www.gnu.org/software/gdb/download/ 按照一般的想法,最新版本越好,因此下载7.2这个版本。当然,凡事无绝对。 我们以gdb-7.2.tar.bz2 这个文件为例。 2、解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压...
阅读全文
2016-07-06 06:54 工业·编程 ⁄ 共 1522字 暂无评论
一、lsof 查找系统打开的文件 经典用法。查看进程打开的文件句柄。 案例:我的一个服务进程,运行一段时间后,在64位机器上运行正常,在32位机器上运行不正常。用lsof一看。有打开的文件未关闭,因64位机器默认进程打开文件数是100万,因而没有出现问题。 其他用法。 1、查看某个文件被哪个进程打开。 2、查看某个文件系统被哪个进程使用。 更多用法查看:http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html 二、s...
阅读全文
2016-07-05 06:53 工业·编程 ⁄ 共 3222字 暂无评论
随着XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿于其中的测试工作,经过这个过程出来的自然是高质量的软件。甚至有人声称XP会淘汰调试器!这当然是有一定道理的,然而就目前的现实来看,这还是一种理想。在日常工作中,调试工具还是必不可少的。在Linux下,调试工具并非只有gdb,还有很多其它调试工具,它们都各有所长,侧重方面也有所不同。本文介绍几种笔者常用的调试工具: 1.    &#...
阅读全文