---
# System prepended metadata

title: Debugging on Linux
tags: [Debug, QCT]

---

Debugging on Linux
===

###### tags: `Debug` `QCT`

## Command Line Tools

### Disk
* check mount point of device partition
```
df -h
```
* check file system type of device partition
```
sudo parted
(parted) print list
```
* check LVM
```
sudo lvmdiskscan
sudo pvscan
sudo vgscan
sudo lvscan
```
* modify disk partition
```
sudo fdisk -l
sudo fdisk /dev/sda
sudo partprobe
```

### File
* ```du -ah```

### Network
* netstat
```
netstat -nlptu
-l, --listening (Show only listening sockets)
-n, --numeric (Show numerical addresses)
-p, --programs (Show the PID and name of the program)
```

### Log
* tailf
**tailf** will print out the last 10 lines of a file and then wait for the file to grow.
* systemd日誌
  - [journalctl工具基础介绍](https://blog.51cto.com/13598893/2072212)
```journalctl -u httpd.service```
```journalctl _UID=33 --since today```
```journalctl -p err```
```journalctl -f```
* syslog
紀錄process或kernel message的檔案。

### Process
* ```ps```: 顯示process的user ID, group ID, PID, parent PID, TTY, memory usage, status等。
* ```top```: process依據CPU負載排序顯示。
* ```kill```: 作業系統給process送TERM訊號，process自行結束。
* ```kill -9```: 作業系統給process送KILL訊號，process被作業系統強迫結束。
* strace: trace **system calls** and signals 
```strace -i [CMD ARG1 ARG2]```
* [GDB](https://hackmd.io/@derailment/gdb)

### Kernel Message
Kernel輸出的訊息，從console, syslog, dmesg觀察。
* [dmesg 指令的用法](https://imsardine.github.io/2016/11/06/dmesg-command/)
開機時，kernel 被載入記憶體，接著 module/driver 開始驅動硬體，過程中會輸出大量的訊息 (message)；開機完成後，kernel 偶爾也會產生一些有助於診斷問題 (diagnostic) 的 message，例如 I/O 發生問題、USB 裝置熱插拔時。
```dmesg -Hw```

## Glossary

### CPU架構
* i386 (x86)
Intel 32-bit 架構通稱。
* x86_64
64-bit 架構通稱，能執行i386指令。

### Thread & Process
* Kernel最小可管理的程序運行實例為thread。
* Process是由一個或多個thread組成的程序運行實例，所有thread共享process配到的記憶體。

### Real-time Process
比一般process優先級更高，在主動釋放CPU或被其他優先級更高的real-time process搶佔之前，一直佔有CPU。

### User Space & Kernel Space
應用程式能訪問的虛擬記憶體為user space, 只有內核才能訪問的虛擬記憶體為kernel space。

### Crash
應用程式或作業系統突然停止運行。
* 應用程式crash要用core dump
  * Core Dump
  當程序(Process)運行的過程中異常終止或崩潰時，會把記憶體快照、暫存器訊息(程式計數器、堆疊指標)、記憶體管理信息、其他處理器和作業系統狀態存到檔案。
* 作業系統crash要用crash dump
  * Crash Dump
  保存內核(Kernel)的暫存器和記憶體快照。






