パン屑の轍

ボドゲとかプログラミングとかゲームとか

Linuxデバッグツール備忘録

Linuxデバッグ(とか)ツール備忘録

Linuxデバッグやトレース等を行うためのツールの使い方などのメモ。

strace

概要

プログラムのシステムコール発行を追跡するためのツール

sudo apt-get install sysstat

使い方

$ strace <options> -o <log file name> ./<execution target>
$ strace <options> -o <log file name> python <execution target>

<options>については以下。

  • -T : マイクロ秒の精度で情報を取得
  • -tt : システムコール発行時の時刻をマイクロ秒単位で表示

nice | renice

概要

nice値(優先順位: max -20 ~ 19 min)を変更するためのツール

reniceは既に実行されているプロセスのnice値を変更するためのツール

使い方

$ nice -n <niceness> <command(exgrep "hoge")>
$ renice <diff niceness> <pid>
$ renice <diff niceness> -u <user>

-uを指定した場合は、そのユーザ権限で実行されている全プロセスが対象になる

sar

概要

CPU, メモリ, DISK IOなど様々な情報のモニタリングを行うためのツール

sudo apt-get install sysstat

使い方

$ sar <options> -o <log file name> <interval> <count>
hh:mm:ss CPU %user %nice %system %iowait %steal %idle
hh:mm:ss all     0.88     0.00    0.00        0.00       0.00    99.12
<snip>

<options>については以下。

  • -f <file name> : -oで吐き出したファイルを食わせる
  • -P <ALL|CPU No.> : CPU状況を見たい時
  • -r : メモリ使用量を見たい時
  • -R : メモリページの状況を見たい時
  • -d : ディスクIOの状況を見たい時
  • -n <keyword> : ネットワークの状況を見たい時。<keyword>については以下。
    • DEV : インターフェース
    • IP : IP
    • TCP : TCP
  • -s hh:mm:ss -e HH:MM:SS : hh:mm:ssからHH:MM:SSの情報を表示
  • -u : -oをつけない場合つける

見方

CPU

  • %user : ユーザモードでのCPU利用率
  • %nice : nice値を変更しているプロセスのCPU使用率
  • %system : カーネルモードでのCPU利用率
  • %iowait : IO待ちでのCPU使用率
  • %steal : ゲストOSが割り当ててもらえなかったCPU使用率
  • %idle : 待機中CPU使用率

参考

Qiita - Linux - sarコマンドについて @makaaso

stress

概要

負荷をかけるためのツール

sudo apt-get install stress

使い方

$ stress <options> -q -t <timeout sec> &

<options>については以下

<N>は全てワーカーの数

  • -c <N> : CPUに負荷をかけたい時
  • -i <N> : ディスクIOに負荷をかけたい時
  • -m <N> : メモリに負荷をかけたい時

ldd

概要

リンクしているライブラリを調べるツール

使い方

$ ldd <program>

gdb

概要

デバッガ

使い方

$ gdb <object file>

上記実行後、コマンドの入力が求められる。

  • 行にブレークポイントを張るとき: b <src file>:<lines>
  • 関数にブレークポイントを張るとき: b <function name>
  • ブレークポイント一覧表示: i b
  • ブレークポイント削除: d <no>
  • 変数にウォッチポイントを張る時: w <var name>
  • 実行するとき: run
  • ステップ実行するとき(関数スキップ): n
  • ステップ実行するとき(関数の中に入る): s
  • 変数の値を見たい時: p <var name>
  • 変数の値を変える時: p <var name>=<value>
  • 既に実行されているプロセスにアタッチするとき: attach <pid>
  • デタッチするとき: detach

Ctrl-x => 1 or 2ソースコードを見ながら実行できる。

参考

Qiita - はじめてのgdb

Qiita - gdbで効率的にデバッグするためのTips

MEMWATCH

概要

メモリリーク・破壊監視ライブラリ

使い方

ソースコード#include "memwatch.h"を追加。

コンパイル時に、gcc-DMEMWATCH -DMW_STDIO memwatch.cを渡す。

実行すると、メモリリーク等の報告が記載されたmemwatch.logファイルが吐き出される。

参考

IBM developerWorks

readelf

概要

ELFバイナリを読むためのツール

使い方

$ readelf <options> <ELF file>

<options>については以下。

  • -h : 開始アドレス
  • -S : 開始アドレス、データとコードのファイル内オフセット、サイズ

taskset

概要

プロセスを指定したCPUで動作させるためのツール

使い方

$ taskset -c <CPU No.s> <command>`
$ taskset -pc <CPU No.s> <pid>`

cat /proc/cpuinfo

概要

CPU情報が見れる

time

概要

実行時間を見るためのツール

使い方

$ time <command>

随時更新