C++ で正規表現(regex)を使おうと思って、プログラムを作成していた。コンパイルは通るけど、どうも動作が思ったようにならない。しばらく悩んだ結果見つけたのが以下。
Is gcc 4.8 or earlier buggy about regular expressions?
4.8 以下のバージョンだと正規表現がちゃんとサポートされてないという話らしい。というわけで、g++-4.9 をインストールしたところ所望の動作を得られた。
regex_match() 便利でいい。
C++ で正規表現(regex)を使おうと思って、プログラムを作成していた。コンパイルは通るけど、どうも動作が思ったようにならない。しばらく悩んだ結果見つけたのが以下。
Is gcc 4.8 or earlier buggy about regular expressions?
4.8 以下のバージョンだと正規表現がちゃんとサポートされてないという話らしい。というわけで、g++-4.9 をインストールしたところ所望の動作を得られた。
regex_match() 便利でいい。
C言語で書かれたプログラムのコールグラフを作成する方法についてのメモ。
Wikipediaのコールグラフの項から定義を拝借。
コールグラフ (マルチグラフとも呼ばれる) とは、コンピュータプログラムのサブルーチン同士の呼び出し関係を表現した有向グラフである。
プログラムの解析をしていると、関数の呼び出し関係を視覚的に見たい時がある。そんな時には迷わずコールグラフを描いてみるといい。
コールグラフには、静的なコールグラフと動的なコールグラフの2通りがある。静的なコールグラフとは、プログラムの実行を伴わずに作成するもの。静的なコールグラフはソースコードのみを解析することで得たり、プログラムをコンパイルする時の情報を使って作成する。コールグラフに存在する関数呼び出しがプログラムを実行したときに起こるかどうかはわからない。
一方、動的なコールグラフは、実際にプログラムを実行したときに起きた関数呼び出しに基づいて作成される。そのため、作成にはプロファイラを用いる。動的なコールグラフにおける関数呼び出しは実際に発生したものであるが、入力に依存する。
解析するときに知りたい情報によってどちらのコールグラフを作るのが望ましいか判断する必要がある。網羅的に関数呼び出しを表現したければ静的なコールグラフを作成するべきだし、とある条件下(入力・環境)におけるプログラムの動作を解析したければ動的なコールグラフを作成するべきだ。また、静的なコールグラフでは大規模になりすぎてみるべきポイントを絞れないといった場合に動的なコールグラフから見て実際に動いてる部分から解析するというアプローチもありだろう。
egypt と codeviz というツールが有名どころなようだ。今回は egypt を用いた。使い方は少し調べれば出てくるから、ほかのサイトを見てもらうとして、自分が使った時に調べた点をいくつかメモしておく。
こちらも複数ツールがあるようだが今回は gperf2dot.py を利用した。名前に gperf とついているが、gperf だけでなく他のプロファイラの出力も読み取ってくれる。こちらも基本的な使い方はほかのサイトを見てもらうとして、ポイントをメモしておく。
Windows 10 結構いい。気に入ってきた。けど、標準のメールアプリはテキスト形式で送れないのが痛い。個人的には、個人で HTML メール送ってくるのは勘弁してほしい派。
少し調べた結果、結局 Thunderbird を使うことにした。
今後もサポートが続くことを切に願いつつ・・・
設定したことをいくつかまとめておく
調べるのに時間がかかったのでポインタをメモ。
PowerShell ネットワークのカテゴリを変更する~PublicからPrivateへ
PowerShell の Get-NetConnectionProfile, Set-NetConnectionProfile を使えば良いとのこと。
AMD Neo シリーズの CPU を搭載したマシンを CentOS 7.2 にアップデートすると、起動直後にハングする問題が起きています。自分は N54L を搭載したマシンで発生。
問題のカーネルバージョンは kernel-3.10.0-327.el7 で、boot option を追加すると回避できるとのこと。
Adding initcall_blacklist=clocksource_done_booting to GRUB_CMDLINE_LINUX in /etc/default/grub and then grub2-mkconfig -o /etc/grub2.cfg fix this bug. Thank you for sharing this solution.
何度も調べているので参考になる URL をメモ。
久しぶりに Windows マシンをセットアップしたのでメモ。
環境は Windows 10 pro 64bit。
2/28/2016 追記
3/25/2016 追記
8/18/2016 更新 and 一旦整理
Ubuntu 14.04 で DTRACE に近い機能を実現する SystemTap を使うための方法。
いくつか参考になる情報があるけど、どうもうまくいかない。
Ubuntu 14.04 (trusty) のリポジトリの SystemTap のバージョンは 2.3 で、これが古くてアップデートされたカーネル(自分の場合は 3.16.0-50)に対応していないのではないかと予想。SystemTap 公式を参考にして最新版をインストールしたところ、使えるようになった。
$ sudo apt-get install gcc g++ elfutils libdw-dev
$ codename=$(lsb_release -c | awk '{print $2}')
$ sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
EOF
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
$ sudo apt-get update
$ sudo apt-get install linux-image-$(uname -r)-dbgsym
$ sudo stap -e 'probe begin { println("Hello, World!") exit() }'
Hello, World!
top でプロセスの一覧を眺めている時に root のプロセスが邪魔な時がある。そんな時には以下の方法で特定のユーザのプロセスを非表示にできる。
$ top -U !username
top コマンド起動後に u を押して !username と入力することでも可能。