【34.Linux驱动调试-根据系统时钟定位出错位置】教程文章相关的互联网学习教程文章

38.Linux应用调试-初步制作系统调用(用户态->内核态)【代码】【图】

1首先来讲讲应用程序如何实现系统调用(用户态->内核态)???我们以应用程序的write()函数为例:??1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(Software Interrupt)指令,从而产生软件中断,swi指令如下所示:swi #val //val: bit[23:0]立即数,该val用来判断用户函数需要调用哪个内核函数 ??2)然后CPU会跳到异常向量入口vector_swi处,根据swi指令后面的val值,在某个数组表里找到对应的sys_write()函数??代码如...

37.Linux应用调试-修改内核来打印用户态的oops【代码】【图】

1.在之前第32章里,我们学习了通过驱动的oops定位错误代码行oops代码如下所示:Unable to handle kernel paging request at virtual address 56000050      //无法处理内核页面请求的虚拟地址56000050pgd = c3850000[56000050] *pgd=00000000Internal error: Oops: 5 [#1]        //内部错误oopsModules linked in: 26th_segmentfault//表示内部错误发生在26th_segmentfault.ko驱动模块里CPU: 0 Not tainted (2.6....

36.Linux应用调试-使用gdb和gdbserver【代码】【图】

1.gdb和gdbserver调试原理??通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能??和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb1.1同样,它们都会需要一个带调试信息的编译文件.??通过Makefile里的arm-linux-gcc -g 来的, -g:表示编译文件里包含gdb调试信息1.2为什么需要调试信息的...

35.Linux应用调试-strace命令【代码】【图】

1.strace简介??strace常用来跟踪进程执行时的系统调用和所接收的信号。通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时间以及返回值等2.安装strace命令??首先需要以下两个文件:??strace-4.5.15.tar.bz2 ??strace-fix-arm-bad-syscall.patch ??步骤如下:#tar -xjf strace-4.5.15.tar.bz2#cd strace-4.5.15/#patch -p1 <../strace-fix-arm-bad-syscall.patch//“p1”值去掉补丁的第一个路径 “<”指补丁文...

34.Linux驱动调试-根据系统时钟定位出错位置【代码】【图】

??当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的???答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便在中断函数中打印该进程的信息1.先来回忆下在之前的内核中断运行过程,当内核中断产生时,会做以下几步:??1)pc-4(计算返回地址值),然后将各个寄存器值存到sp栈里 ??2)获取中断号,获取sp地址,然后调用asm_do_IRQ()1.1其中asm_do_IR...

32.Linux驱动调试-根据oops定位错误代码行【代码】【图】

1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来1.1以LED驱动为例??将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示:1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示:2.接下来,我们便来分析oops:Unable to handle kernel paging request at virtual address 56000050      //无法处理内核页面请求的虚拟地址56000050pgd = c3850000[56000050...

30.Linux-printk分析、使用__FILE__, __FUNCTION__, __LINE__ 调试【代码】【图】

1.在驱动调试中,使用printk(),是最简单,最方便的办法??当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上??当uboot的命令行里的“console=ttySA0,115200”时,表示printk()输出在串口UART0上,波特率=115200??当uboot的命令行里的“console=tty1 console=ttySA0,115200”时,表示printk()同时输出在串口上,以及开发板的LCD屏上??显然printk(),还是根据命令行参数来调用不同控制台的硬件处理函数??内核又是怎么...

Linux内核调试方法总结之coredump【图】

什么是core dump?分析core dump是Linux应用程序调试的一种有效方式,像内核调试抓取ram dump一样,core dump主要是获取应用程序崩溃时的现场信息,如程序运行时的内存、寄存器状态、堆栈指针、内存管理信息、函数调用堆栈信息等。Core dump又称为“核心转储”,是Linux基于信号实现的。Linux中信号是一种异步事件处理机制,每种信号都对应有默认的异常处理操作,默认操作包括忽略该信号(Ignore)、暂停进程(Stop)、终止进程(T...

者旨於陽 Linux内核调试方法总结之反汇编【图】

Linux反汇编调试方法Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类问题。代码示例如下:#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <execinfo.h>#include <fcntl.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h> #define PRINT_D...

linux shell命令中调试的set -n

set有三个选项,可以用于脚本的调试 选项名称 简写 意义noexec n 读取脚本中的命令,进行语法检查,但不执行这些命令xtrace x 在执行每个命令之前,将每个命令打印到标准输出(stdout)无 c... 从...中读取命令 #!/bin/bash set -n #或者 set -o noexececho "Start executing this script..." #用于判断脚本是否执行var=0while :if [ $var -gt 3 ] then break fi let "var=var+1"done ./misskey.sh ./missk...

Linux下性能调试工具运维笔记【代码】

作为一名资深的linux运维工程师,为方便了解和追求服务器的高性能,如cpu、内存、io、网络等等使用情况,要求运维工程师必须要熟练运用一些必要的系统性能调试工具,liunx下提供了众多命令方便查看各种资源的使用情况。经常用的有ps、top、free、mpstat、iostat、vmstat、netstat。。下面简单介绍下这几个工具的使用:一、toptop是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器...

【Linux】gdb常用的调试命令

gdb 常用的调试命令 l 显示代码b +行号 加断点info break 显示断点信息delete 删除断点r 启动程序n 单步执行,下一步c 继续执行s 进入函数finish 跳出函数p 打印q 退出调试bt 显示函数调用栈多进程中,跟踪子进程:set follow-fork-mode child多线程中,A 查看线程信息 info threads B 切换到指定线程 thread id

Cascade rcnn在linux环境下运行的调试记录(pytorch版本)【代码】【图】

这个cascade RCNN的调试是真的折磨人,对于新手的我,查了各种各样奇奇怪怪的资料,终于调通了。以此记录,如果能帮助到大家,那就更好了。 调试步骤 第一步 下载工程第二步 观察setup.py第三步 配置环境报错记录第一步 下载工程 我的工程目录是这样的 此处我们默认大家可以正确导入数据集,因为此处主要记录的是如何生成nms里面调用的_C库。 第二步 观察setup.py 用命令行进入 到 lib文件夹 那么我们此时,先别急着运行什么,我...

[linux kernel] 内核下ksz9031驱动调试踩过的坑【代码】

系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 -linux4sam_6.0 板子型号:at91sama5d3x-xplained MCU型号:sama5d36 内核中调试驱动,和uboot中会有些区别,因为内核启动过程是顺序启动的,硬件上电后,外部的器件要快速做好准备工作,内核代码初始化到这个器件如果器件没有完成上电复位,很可能会驱动失败,需要硬件和软件时序同步,这是非常重要的一点。 ...

通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序【代码】【图】

最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易。一直习惯在Visual Studio中进行编码和调试。现在我想的是可以简单快速的测试.NET Core应用在Linux。所以通过本篇文章我们能了解到如何在Windows中使用Visual Studio进行远程调试我们部署在Linux中的应用程序,从而我们可以去发现或者说去调试在中会产生的一些问题。 Windows中的Linux:Hello WSL 子系统从这里我不做过多的介绍了,大家...

调试 - 相关标签