ToDo:
https://twitter.com/shinji_kono/status/1332577164089126912
デバッガについては思うことがあって、暇になったらあそびたいと思ってるのだけど、あんまそういう感じでもないので、思ってたことを思い出しつつ書いてみる。
C/C++ の類のデバッガって、デバッグされるプロセスにちょっかいをかけて、なんというか勝手に色々やるのが基本になってる。なんかこれが微妙だと思っていて、クラッシュからの回復とかはともかく、基本的な情報を取ってくるとか関数を呼ぶとか、そのくらいはデバッギ自体にやらせると良いのじゃないか、と思ってる。デバッギ自体がデバッグされるのに協力するイメージ。あるいはバックドアみたいなものを仕込んでおくという考え方でもいいかもしれない。
そういうことをやろうと思うと、特殊なライブラリをリンクしておかないといけないのではないか……みたいな気がするかもしれないけど、たぶんそんなことはなくて、デバッガからすればターゲットプロセスに mmap させるとか何も難しくないので、動いてるプロセスにデバッグに協力するためのバックドアを後から注入する、とかもまあ簡単にできると思う。
これは別に新しい発想というわけじゃなくて、 Java だと JDWP というプロトコルがあって、 JVM 自体がデバッグに協力する仕組みがある。 JVM 自体にお願いするので(そして Java はリフレクションとかももともとあるので)、文字列で指定した関数を呼んでちょうだい、とかまあそんなに難しくない。 C/C++ も dlsym とかで取ってこれる範囲ならまあなんとなりとなるんじゃないかなと思う。
lisp/erlang あたりの文化圏の人は動いてるものをいじって……みたいな武勇伝をよく言ってるイメージがあるけど、そういう発想にも近いのかもしれない。
あともう一個近いと思ってるのは borgmon/prometheus で、いや、後者はよく知らないのだけど。なんというかアプリケーション自体がモニタリングに協力するために情報を出す、て発想が似てるかな、と。昔読んだインフラの本とかだと、 apache のログを解析したりしてログを集めてくるツールがあったりとかして、なんかグーグルのモニタリングの仕組みの方が良いよなあ、とずっと思っていた。
んでまあ JDWP みたいな共通のプロトコルを全ての言語が喋ってると良いな、と思っていたのがある。一つデバッガを書けば色んな言語をデバッギにできるかもしれないし、そもそもデバッガ以外の用途もありえるんじゃないかな、とか妄想していた。要は任意の情報を取ってきたり、任意のデータをさしこんだり、任意のコードを実行させられるプロトコルなので、別の言語のコードを気軽に呼ぶ仕組みとしても機能しうるんじゃないかとか
問題は C/C++ がリフレクションの機能が弱いので、デバッガに協力しようにも結局 DWARF とか見ないと協力しづいらいことではあるが……
(21:51)
前 | 2020年 11月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。