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总线的数据
如果要抓所有...
tcpdump, USB编程, Wireshark, 软件调试阅读全文
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; ...
死锁分析, 软件调试阅读全文
2016-08-04 22:44
⁄ 工业·编程
⁄ 共 4062字
在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...
GDB, 软件调试阅读全文
2016-07-21 23:08
⁄ 工业·编程
⁄ 共 882字
在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性。
GDB调试器当然也支持这一特性,但是功能更加灵活和丰富。
GDB将当前函数的栈帧编号为0,为外层函数的栈帧依次加1,这些编号将成为一些GDB命令的参数,以指明将要操作的是哪一个函数的栈帧。
GDB还支持使用Address...
GDB, 软件调试阅读全文
2016-07-20 23:05
⁄ 工业·编程
⁄ 共 2912字
在调试程序的过程中,可以自由地查看相关的源代码(如果有源代码的话)是一项最基本的特性。
一些IDE在这方面做得相当好,GDB当然也提供了这项特性,虽然不如IDE直观,但在一定程度上要比IDE更加灵活和快捷。
GDB之所以能够知道对应的源代码,是因为调试版的可执行程序中记录了源代码的位置;因为源代码的位置在编译之后可能会移动到其它地...
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系统调用提供了一种方法,让父进程可以观察和控制其它进程的执行,检查和改变其核心映像及寄存...
GDB, 软件调试阅读全文
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,它们解压...
GDB, 开源, 软件调试阅读全文