本文档适用于但愿了解当前SylixOS的调试手段的工程师。linux
2.1 cdump简介shell
cdump 是SylixOS系统下的shell命令,用于系统/应用崩溃的信息记录。cdump能够将内核保存在堆中的异常信息显示出来并清空内核堆中的异常信息或者保存下来。express
当系统/应用程序发生异常时,能够在系统命令行下输入 cdump -s 保存异常信息,异常信息将保存在/var/log/cdump/ 目录下,如图 2.1。服务器
图 2.1保存异常信息网络
将异常信息显示出来使用cdump -c命令,如图 2.2。tcp
图 2.2显示异常信息函数
2.3 cdump注意事项工具
SylixOS下能够经过kill 命令打印进程和线程上下文,在 shell 命令行下输入ts命令,查看该进程或线程的pid/tid 值,再在shell命令行下输入 kill -n -47 [pid/tid],如图 3.1 所示;post
图3.1 上下文打印信号优化
能够经过进程上下文中信息比对objdump反汇编出来汇编代码,分析程序。
在IDE下能够利用IDE安装目录下的 xxx-objdump.exe 工具对可执行文件进行反汇编操做;下面以elf文件test为例详细介绍:
具体操做流程:
1,将xxx-objdump.exe 工具和可执行文件放在一个文件夹下;
2,在该文件夹下打开cmd,进入该目录,输入xxx-objdump.exe [option] 可执行文件 >> 重定向文件,如图 4.1 所示:
图 4.1 objdump使用演示
在IDE Device下,Launch Device 后,能够经过 Thread Pending列表查看到发生死锁的线程,死锁线程为红色,如图 5.1 ;
图 5.1 IDE死锁检测
也能够在shell 命令行下输入 tp 命令,查看到死锁线程后缀为 pmutex,如图 5.2 所示:
图5.2 shell死锁检测
使用RealEvo-IDE 能够在设备或模拟器上在线调试应用程序,目前有如下几种方式:
具体调试方法能够参考《RealEvo-IDE使用手册》第五章内容以及《RealEvo-Simulator使用手册》第2.8节、2.9节。
能够在系统命令行下,查看系统/应用程序状态,有以下几种:
具体命令的使用能够参考《SylixOS shell用户手册》。
在SylixOS下若是要将寄存器中的值打印出来, 须要移植工具到系统下以及该寄存器地址须映射到系统下,工具以下:
SylixOS能够将在shell 命令行下输入系统函数名去调试该函数。
RealEvo-IDE支持Syslog 服务,具体使用方法可参考《RealEvo-IDE使用手册》第6.6节;
系统日志(须要在bsp将kdlog的值改成yes),在系统启动会在串口下打印内核信息。
SylixOS下提供对网络包的抓取及分析工具tcpdump,tcpdump采用命令行方式,它的命令大体以下,具体的各类使用方法能够在网上参考linux下tcpdump的用法:
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --immediate-mode ]
[ expression ]
参数含义:
-A |
以ASCII格式打印出全部分组,一般用来抓取www的网页数据包数据。 |
-c |
在收到指定的数量的分组后,tcpdump就会中止。 |
-C |
在将一个原始分组写入文件以前,检查文件当前的大小是否超过了参数file_size 中指定的大小。若是超过了指定大小,则关闭当前文件,而后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。 |
-d |
将匹配信息包的代码以人们可以理解的汇编格式给出。 |
-dd |
将匹配信息包的代码以c语言程序段的格式给出。 |
-ddd |
将匹配信息包的代码以十进制的形式给出。 |
-D |
打印出系统中全部能够用tcpdump截包的网络接口。 |
-e |
在输出行打印出数据链路层的头部信息,也就是使用数据链路层的MAC数据包数据来显示. |
-f |
将外部的Internet地址以数字的形式打印出来。 |
-F |
从指定的文件中读取表达式,忽略命令行中给出的表达式。 |
-i |
指定监听的网络接口。 |
-l |
使标准输出变为缓冲行形式,能够把数据导出到文件。 |
-L |
列出网络接口的已知数据链路。 |
-b |
在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。 |
-n |
不把网络地址转换成名字。 |
-nn |
不进行端口名称的转换。 |
-N |
不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。 |
-t |
在输出的每一行不打印时间戳。 |
-O |
不运行分组分组匹配(packet-matching)代码优化程序。 |
-P |
不将网络接口设置成混杂模式。 |
-q |
快速输出。只输出较少的协议信息。 |
-r |
从指定的文件中读取包(这些包通常经过-w选项产生)。 |
-S |
将tcp的序列号以绝对值形式输出,而不是相对值。 |
-s |
从每一个分组中读取最开始的snaplen个字节,而不是默认的68个字节。 |
-T |
将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议)。 |
-t |
不在每一行中输出时间戳。 |
-tt |
在每一行中输出非格式化的时间戳 |
-ttt |
输出本行和前面一行之间的时间差。 |
-tttt |
在每一行中输出由date处理的默认格式的时间戳。 |
-v |
输出一个稍微详细的信息,例如在ip包中能够包括ttl和服务类型的信息。 |
-vv |
输出详细的报文信息。 |
-w |
直接将分组写入文件中,而不是不分析并打印出来。 |
-X |
能够列出16进制以及ASCII的数据包内容,对于监听数据包内容颇有用。 |
图 11.1 对网口en1抓取数据包的示列:
图11.1 tcpdum示列
《RealEvo-IDE使用手册》
《SylixOS应用开发手册》
《SylixOS shell用户手册》
《RealEvo-Simulator使用手册》