linux调试技术

linux调试技术

ID:19756370

大小:370.50 KB

页数:10页

时间:2018-10-05

linux调试技术_第1页
linux调试技术_第2页
linux调试技术_第3页
linux调试技术_第4页
linux调试技术_第5页
资源描述:

《linux调试技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux调试技术吴士力e-mail:wsl.wushili@gmail.com调试的概念调试(debug)调试就是对程序进行查错和排错,以保证程序的正确性。程序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况的正确处理。调试的基本方法变量有正确的值执行正确的条件路径函数参数的正确传递调试器内存调试工具危险的内存比尔盖兹:内存好比雷区内存泄露、缓冲区溢出等常见内存错误,破坏大、隐蔽memwatch1.gcc-otest-DMEMWATCH-DMW_STDIOmemtest.cmemwatch.c2../test3.mem

2、watch.log添加系统调用1.在/include/linux/syscalls.h中增加要添加的系统调用的声明asmlinkagelongsys_test(void);2.在/arch/arm/include/asm/unistd.h中增加系统调用号的定义#define__NR_test(__NR_SYSCALL_BASE+361)3.在/kernel/sys.c中实现系统调用函数asmlinkagelongsys_test(void) {printk("pid:%d,thisistestcall.",current->p

3、id); return0; }4.在/arch/arm/kernel/call.S中加入系统调用表的初始化部分/*361*/CALL(sys_test)5.生成内核镜像添加系统调用测试1.测试程序#include#include#includeintmain(){inti=10;i=syscall(361);printf("aftersyscall:i=%d",i);return0;}2.测试结果pid:859,thisistestcall.aftersysc

4、all:i=0OOPSoopsoops是一种反映内核程序错误引发时的系统状态的机制oops包含CPU的状态,进程的状态,内核堆、栈的状态等制造oops*(int*)0=0;段错误asmlinkagelongsys_test(void) {printk(“pid:%d,thisistestcall.”,current->pid);*(int*)0=0;return0; }OOPS分析UnabletohandlekernelNULLpointerdereferenceatvirtualaddress00000000pgd=c1ca

5、c000[00000000]*pgd=31c2b031,*pte=00000000,*ppte=00000000Internalerror:Oops:817[#1]Moduleslinkedin:CPU:0Nottainted(2.6.29#9)PCisatsys_test+0x28/0x34LRisatrelease_console_sem+0x1a4/0x1dcpc:[]lr:[]psr:60000013sp:c1c9df98ip:c1c9ded8fp:c1c9dfa4r10:40158

6、64cr9:c1c9c000r8:c002efa4r7:00000169r6:beb2edccr5:00000000r4:0000000ar3:c037ddf4r2:80000013r1:000016ecr0:00000000Flags:nZCvIRQsonFIQsonModeSVC_32ISAARMSegmentuserControl:0000317fTable:31cac000DAC:00000015Processs(pid:859,stacklimit=0xc1c9c260)Stack:(0xc1c9df98to0xc1c9

7、e000)df80:00000000c1c9dfa8dfa0:c002ee00c005dde400000000beb2edcc00000169beb2edf4beb2edfc0000000a……Backtrace:[](sys_test+0x0/0x34)from[](ret_fast_syscall+0x0/0x2c)Code:e59f0010e59310ccebffcfd4e3a00000(e5800000)---[endtrace4191333ea044b6a0]---Segmenta

8、tionfaultOOPS定位PCisatsys_test+0x28/0x34(Oops发生在sys_test+0x28处)通过GDB对vmlinux进行调试1.编译时打开compliewith debug info选项2.grepsys_test

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。