现在位置: 首页 > 软件调试
2020-07-07 19:01 工业·编程 ⁄ 共 423字 暂无评论
Linux 下 对USB抓包是 使用USBMON 即 usb monitor模组来进行抓包操作。需要Linux在编译时打开CONFIG_USB_MON。 挂载debugfs文件系统 sudo mount -t debugfs none_debugs /sys/kernel/debug 确认内核中是否有加载usbmon模块 lsmod | grep usbmon 或者 ls /sys/module/usbmon 如果发现没有对应的目录或者模块,则表示需要加载usbmon modprobe usbmon 抓取USB日志 最好先用lsusb –t 查看一下需要抓哪个USB总线的数据 如果要抓所有...
阅读全文
2019-11-21 12:40 工业·编程 ⁄ 共 612字 暂无评论
有时候调试bug需要知道某个函数从哪里调用导致出了问题的,就需要打印函数调用堆栈信息,在Linux可以使用backtrace函数来实现,下面是一个简单的例子: #include <cstdio> #include <cstdlib> #include <execinfo.h> using namespace std; void Test3(int i) {     printf("Hello world!\n");     int nptrs;    ...
阅读全文
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,它们解压...
阅读全文