メッセージ。 - [技術] プロセスへの外部からのアタッチ

# [技術] プロセスへの外部からのアタッチ

ここ数日、Haskellで作ったWebアプリケーションCGIに対して、外部からロボットがアクセスすることで負荷が高まっている。サーバーのメモリが少ないからか、OSを道連れにして落ちてしまうことさえしばしばあった。どこかで無限ループしているのか調べたいのだけど、うまく調べる方法がないみたい。もしこれがCで書いたアプリケーションなら、gdbでプロセスにアタッチしてどの関数が動いているのか調べることができる。しかし少し調べたところ、ほかの多くの言語(Haskellや動的言語のメジャーな実装等)では同様の操作ができないようだ。

よく考えてみれば、Paul Grahamが継続ベースのWebアプリケーションで成功したときにも、外部からアプリケーションにアタッチして動作を確認したり変更したりできることがメリットとして挙げられていた。これは本質的に、gdbがやっていることと同じだ。そういう意味でこのような操作ができる機能は重要だし、一方で「プログラムがいまどのように動いているのか」を把握できるC言語(というかgccとgdb)はすごい。このような操作ができないということは、要するに机上デバッグしかできないということだ。

C言語はコンパイラ型の静的プログラミング言語なのに(gccとgdbでは)こういう操作ができる一方で、一段抽象度が高く、VM上で動くことも多い動的プログラミング言語の多くがこの機能をサポートしていないというのは不思議だ。技術的な難易度(とか工数や距離?)でいうと逆だろうと思うから。言い換えるなら、gccやgdbといった処理系が、ほかの処理系に比べて大変作りこまれ、こなれているということなんだろうな。今さら気付いたとも言えるが、gccアプリケーション(gcc -gでコンパイルされたもの)はVM上で動いているのだ。なんてことを考えた。
2010-02-18 09:30:16 / ふじさわ@求職中 / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。