1.printf
视觉是最清晰的,理想化的,你在每行都写一个printf,则你就能很清晰的定位,哪行错了。
2.ASSERT(CONDITION)
能够有效地提前地检测出问题。
UNUSED:在函数的参数之后添加,说明可能这个参数不会用到。
NO_RETURN:在函数的原型后添加说明函数没有返回。
NO_INLINE:加在函数原型告诉编译器不能把这个函数当作内联函数。
PRINTF_FORMAT:在函数原型告诉编译器函数会打印string ,也可以告诉编译器参数类型错误问题。
3.backtrace:
如果你想了解你的程序的位置,你可以在任意位置插入一个debug_backtrace();
backtrace其实就是把stack里的东西全部都显示出来,而call stack里都是以十六进制描述的,所以需要一个工具称为Backtraces来翻译成function names,source file line numbers;
但是有时候backtrace可能会有bug,举个例子,当函数在最后调用了另一个函数,那么调用的函数可能不会写进backtrace里。嗯。很好。接下来,开启虚拟机~~操作咯~
//****************************************************************************************
下面的操作就是解释backtrace的用法,但是backtrace需要16进制的地址,才能翻译。地址从何而来呢~需要用到前面讲过的,在build 下 pintos run kernel.o ,会显示出call stack:........有地址咯!
到threads/build 看到kernel.o了吧~开启terminal,输入backtrace kernel.o 0x.... 0x.... 0x....
地址是因为要看这个地址到底是什么意思,所以需要backtrace来翻译一下。
我的结果 debug_panic intrff_stub, run_task, run_actions
第一个是debug_panic肯定的,因为这个是调用backtrace的原因。
//****************************************************************************************
4.GDB
在build中打开terminal,输入pintos --gdb -- run kernel.o,会出现waiting for gdb connection on port 1234
在build中再打开一个terminal 输入pintos-gdb kernel.o,接下来每行左边都有(gdb),输入target remote localhost:1234或者debugpintos,则原先的terminal跳出connected to 127.0.0.1
下面介绍几个比较简单的命令:
1.c 即执行,如果你想停止,则按ctrl-c。
2.break function/file:line/*address 设断点。
3.l *address 记住一定要加*哦~~可以列出给定地址的周围的代码。
4.bt 列出backtrace
5.btthread thread //把给定的thread的backtrace列出来
6. btthreadlist list element //列出给定的list的全部的线程的backtrace,但是必须要指定elements list_elem ,将会显示比如main,idle等线程及其backtrace
补充:线程都是以链表形式组成,节点是list_elem
/* List element. */
struct list_elem
{
struct list_elem *prev; /* Previous list element. */
struct list_elem *next; /* Next list element. */
}; 是实现。在list.h中。
//-----------------------------------------------------------------------------------------
总结一下:
1.backtrace的用法:
(1)backtracefile address
(2)debug_backtrace()
2.gdb
(1)c
(2)ctrl c
(3)pintos --gdb -- run file
pintos-gdb file
debugpintos
(4)btthreadlist list elem
(5)bt
(6)l *address
(7)break
分享到:
相关推荐
串口调试工具串口调试精灵 串口助手PLC串口通信调试大全(40个): AccessPort 1.33.rar Awen串口调试助手 4.0.rar BOAST串口调试工具Ver3.69.rar COMDEBUG共享版.rar ComFilter V2.0.rar Commix V1.4.rar ComTone ...
鬼鬼JS调试工具,就如软件名说的那样,辅Zhu程序员的,提高效率的,有需要的欢迎来下载! V8调试注意:一般JS运行返回的结果长度不会超过1024,当遇到变态级的超过1024长度的返回结果时,增大数值,否则会崩溃。小...
TCP/UDP socket 调试工具 TCP/UDP socket 调试工具 SocketTool调试软件是一款网络TCP/UDP通信调试工具,本工具集功能强大与简单易用为一体,是无需安装的免费绿色软件。她可以帮助网络编程人员、网络维护人员检查所...
鬼鬼调试JS工具7.5(鬼鬼调试工具)
支付宝客户端调试工具,用于支付宝签名、沙箱环境签名等验证调用支付宝客户端(没有安装的情况下调用web)进行支付的调试工具!开发人员神器
ModbusTCP调试工具
基于STM32 的联合调试侦听设备解决方案(原理图、PCB源文件、调试工具、视频) 基于STM32 的联合调试侦听设备解决方案(原理图、PCB源文件、调试工具、视频) 基于STM32 的联合调试侦听设备解决方案(原理图、PCB...
Soap WebService 调试工具
Windows BLE调试工具是一款运行在Windows下的BLE调试软件,实现了扫描、连接、获取BLE设备上的服务以及向服务写入和读取数据的功能。
是一个轻量快速、功能强大的JS调试工具,鬼鬼JS调试工具官方版可以将JavaScript的语言代码进行格式化处理,可以解密、可以解密、是目前市面上比较好用的JS调试工具了。这次hi谷歌V8引擎解析JS,从而轻松提高编程人员...
TCP IP 简易调试工具,平常测试使用的,功能比较简单,容易上手。
网站本地调试工具.zip 自己测试吧
IPM调试工具(霍尼韦尔Vista系列、23系列报警模块调试工具
Python远程调试工具的设计与实现 Python远程调试工具的设计与实现 Python远程调试工具的设计与实现 Python远程调试工具的设计与实现 Python远程调试工具的设计与实现 Python远程调试工具的设计与实现 Python远程调试...
网络调试工具网络调试网络调试工具工具网络调试工具网络调试工具
通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试工具通讯调试...
对于需要编写并口通讯程序的人员来说,可能会需要一款方便的并口调试工具,但这样的 调试工具 目前网络上好像还没有(至少还没有免费的:)),串口调试器倒有很多(包括我曾经写过的“串口调试 器 2002”),因此我花...
DLT645规约1997和2007调试工具
接口调试工具直接运行Storm.exe即可。接口调试工具直接运行Storm.exe即可。
DLT645调试工具