普段ダイヤグラムやUMLを書くのにdiaを使っている者としてはdiaでオートマトンを書きたくなることはよくあります.(ないか?)しかしdiaにはデフォルトでは簡単にオートマトンを書くことはできません.
http://dia-installer.de/shapes/Automata/でオートマトンを書くための拡張があるので,コレを使うと簡単にオートマトンを書けます.
普段ダイヤグラムやUMLを書くのにdiaを使っている者としてはdiaでオートマトンを書きたくなることはよくあります.(ないか?)しかしdiaにはデフォルトでは簡単にオートマトンを書くことはできません.
http://dia-installer.de/shapes/Automata/でオートマトンを書くための拡張があるので,コレを使うと簡単にオートマトンを書けます.
先日Cygwinのパッケージの更新を行おうと思ってsetup.exeを起動した。すると、レポジトリの情報を取得するときに
unable to get setup.ini
と言われて取得に失敗した。これはどのミラーから取得しても同様に失敗する。
結論としては、Cygwin自体が大幅に更新されていた。気がついたら32bit版と64bit版がリリースされていた。この新しいcygwinをインストールするとパッケージの更新ができるようになった。今までのものからupdateして使う場合32bit版をインストールするとよい。
VMwareの設定を終えたと思いきや共有フォルダフォルダ機能が動きませんでした。何事かと思いましたが色々調べてみると次の記事に当たりました。
Patching VMware Tools in Fedora 18
まさにこの症状で、ちゃんと治りました。
cygwinのsedを使ってタブ区切りのtsvをカンマ区切りのcsvに変換しようとしました。
sed -e 's/\t/,/g'
でできるかと思ったら出来なかった。
sed -e 's/'$'\t''/,/g'
にしたら出来た。案外この辺の便利ツールも環境依存があるなあと思った今日この頃でした。
先日VMwareのFedoraを18にアップデートしたときにハマりました。具体的にはGUIが起動しなくなりました。ランレベルが3なのではないかと思ってstartxで起動させようとしてもXserverが落ちます。17の頃は普通にXが使えていたのでインストールに不備があるということは考えにくいです。
対処法としてはVMwareの3Dアクセラレーションを切ると使えるようになりました...と書いてあったのでそうかと思ったがそう一筋縄ではいかない。libicule.so.48が見つからないと言われて怒られる。確かに/usr/lib64をみてもlibicule.so.49しかない。何かX周りで変更があったのかと思ったらあった。どうやらX周りでMATEとか結構な変更があったようだ。
yum -y groupinstall "Basic X Window System" yum -y groupinstall "GNOME Desktop"しかしやはり依存関係がおかしいらしくinstallできない。しばらく調べていくと Gnome 3.6 missing dependency - libicu 48 というページを見つけた。全く症状が同じだったので書いてあるようにharfbuzzを一回removeしてみた。そこで気づいたのだが最新と言われるharfbuzzがtexliveの提供しているもので依存関係がおかしなことになっているようだ。そこでtexlive-releaseをremoveしてみて色々とX周りを再び入れなおしてみた。すると無事Xが復活した。こんな落とし穴があるとは思わなかった。
普段使っているgdbについて更に便利なコマンドを色々と見つけたので普段使っているものと合わせて纏めてみます。
まず、gccで-gオプションをつけてコンパイルした実行形式のファイル(a.outとする)を作ります。実行は
gdb a.out
でできます。
gdb上でプログラムを起動させるときは
r
で起動できます。
gdbを終了させるときは
q
で終了させます。
ブレークポイントとは処理をストップしてデバッグしたいところで実行を一時中止させる為に設定するものです。設定は
b <行番号/関数名>
でできます。条件を付けたいときは後ろにif <条件>をつけます。例えばtest関数の先頭でa == 0のときだけ停止させたいときは
b test if a == 0
でできます。
設定したブレークポイントを確認したいときは
i b
で確認できます。
ブレークポイントに入った後の進み方を説明します。ブレークポイント内で次の行に進むときは
n
を使います。
また、関数の呼び出し先をトレースするときには
s
を使います。ブレークポイントを抜けるには
c
を使います。
関数を途中で抜けるには
ret
を使います。
ブレークポイントで変数を表示するには
p <変数名>
で表示します。因みに関数を呼び出すこともできます。また、おなじみprintfも使えます。いちいちこれで表示するのが面倒という場合は
disp <変数名>
で自動で表示してくれます。displayの解除は
und <番号>
でできます。番号はdisplayされるときに表示される行頭の番号です。
毎行表示されるのが嫌なときは
wa <変数名>
で変数の内容が変更された時だけ表示されます。また、continueした後でも変数が更新されたときは止まって教えてくれます。変数が読み込まれたときに表示させたいときは
rwa <変数名>
変数の個数が多くなっていちいち表示させるのが面倒なときは
i lo
で定義されている変数の内容を全部表示してくれます。
sで関数の内部をトレースできましたが、
ba
で関数の呼び出し元をトレースすることもできます。呼び出し元についての情報を取得するには
f <番号>
を使います。番号はbaのときの行頭の番号です。
Segmentation Faultなどをしたときにコアダンプされることがあります。このコアファイルを使ってデバッグすることができます。コアファイルがtest.coreだとすると
gdb a.out test.core
のように起動し、baやfやpなどを使うと異常終了した直前の状況を把握することができます。
ちなみに、コアダンプされないときは
ulimit -c unlimited
するとコアファイルが生成されるようになります。また、CYGWINの場合は環境変数CYGWINに
error_start=dumper
を設定しておく必要があります。
黒魔術感がありますが、途中で変数に値を代入することもできます。
set va <変数>=<値>
でできます。
ブレークポイントの削除は
cl <行番号/関数名>
でできます。一括で削除するときは
d
でできます。d <数字>を使うとi bしたときの行頭の番号で削除することもできます。
現在の行の周辺のソースコードを表示するときは
l
を使います。