実行域の検出
(0)
・実行域確認
・ここは一度でも通ったのか?みたいなことを確認する手段を提供したい。
・プログラムが長い間無反応になると心配になるが、そんなときは今どこを実行しているか確認できたり、その時の変数の値も確認できたりしたら便利だろう。
値が徐々に変化していれば「単に時間がかかっているだけ」なのか「意図しないところで無限ループにはまっている」のか、容易に識別できる。
(1)
- プログラム中のセミコロン「;」をすべて、「;counter[12]++;」に置換します。ここでは12にしていますが、0から1、2、・・・とします。つまりセミコロン番号みたいなものです。このcounter[]はグローバル変数で、どのセミコロンがどの行にあったのか、みたいな情報は、他のところで管理します。・・・まあcounterだと一般的な名前すぎるので、そこは変えたほうがよさそうです。
- このプログラムを実行すると、このカウンタがくるくると増えていきます。このカウンタ変数が別のプログラムからリアルタイムに参照できれば、どこが変化しているのかを見ることで、どこを実行しているのかすぐにわかります。また、実行中にこのカウンタを全部ゼロクリアしたら、今どこにいるかをすごく簡単に探せるようにもなります(ゼロ以外のところを探せばいいので)。
- また実行頻度が高いところはどこか、というのを突き止めるためにも使えそうです。
(2)
- ただしこのアルゴリズムでは、ただの代入やただの加算とかでもカウンタを回すことになるので、速度は半分くらいに下がってしまうと思われます。この速度低下が気に入らなければ(私はもちろん気に入らない)、カウンタを入れる場所はもっと減らさなければいけません。
- 結局、分岐に関する命令がなければ、カウントは同じになるだけなので、そういうものを間引けばいいでしょう。
- それでも数割は速度低下すると思われます。だからこの機能がいらないときはoffにできるようにしておくのがいいと思われます。
- もしくは「このスコープ内は実行域検出は不要」みたいな指定ができるとさらにいいかもしれません。そうすれば性能に響く場所、明らかに問題ない場所を、避けることができますので。
こめんと欄