本文檔適用於但願瞭解當前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使用手冊》