パスワードを忘れた? アカウント作成
350855 story
プログラミング

無限ループ脱出ツール「Jolt」 74

ストーリー by reo
カフェイン二倍 部門より

ある Anonymous Coward 曰く、

マサチューセッツ工科大学が無限ループに陥ったソフトウェアを「ループから脱出させる」ツールを開発したそうだ (MIT news の記事本家 /. 記事より) 。

「Jolt」と名付けられたこのツールはLLVM (Low Level Virtual Machine ) を使った静的計測とランタイム監視を組み合わせ、ループ反復時のメモリ状態を比較することで無限ループに陥ったかどうかを判断するという。Jolt はプログラムコンパイル時にプログラムのループ開始箇所と終了箇所をマーキングし、ループ処理が行き詰まってしまった場合には処理をスキップし、次の処理へとプログラムを進めるとのこと。

ただし、Jolt で全てのループ処理をチェックするとプログラムの実行時間が 7 〜 8 % 遅くなるという難点もある。また商業ソフトウェアの開発者に Jolt の使用を求めることは難しいため、研究者らはコンパイルされたアプリケーションに直接使える同様のツール開発を目指しているとのこと。Jolt のバイナリバージョンとも言えるこのツールは「Bolt」と呼ばれているとのことだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • そうすると (スコア:2, おもしろおかしい)

    by PEEK (27419) on 2011年08月04日 11時42分 (#1997564) 日記

    ビューティフルドリーマーや片恋の月やまどか☆マギカがすぐ終わっちゃうようになるんですね。

    --
    らじゃったのだ
  • by chocopa (14067) on 2011年08月04日 11時46分 (#1997567)

    従来通り無限ループにならないようにすべきで、やってもロックしたアプリを殺して連携アプリはそれにソフトランディングできる程度までにしとくべき。

    とはいいつつも、20年以上前だがFM TOWNS用の暴走復帰アプリとして未使用のintベクタを全てフックすることで、暴走を捕まえてコマンドプロンプトに強制復帰するフリーウエアを作っていたけどね。^^;
    (戻ってきても不安定なことが多かった。)

    んで、これってアイドルしてるのも抜いてしまうん?

    俺のマシンは無限ループを9秒で抜くぜ!!

  • デッドロックの解決につかえるかな?
    と思ったものの、ロックを無視してループを出ちまうんじゃダメだな。

  • AMラジオ (スコア:1, 興味深い)

    by Anonymous Coward on 2011年08月04日 11時36分 (#1997558)
    MZ80Kでプログラムを書くときはAMラジオに入るノイズ音で動作確認していました。 今の機械でもプログラムカウンターから音を作れば同じことができると思う。
    • Re:AMラジオ (スコア:2, 興味深い)

      by Hatris (33732) on 2011年08月04日 15時50分 (#1997768) 日記

      FM-7では、本体に内蔵されていたスピーカーに載るノイズで判断できました。

      自分で作ったソフトではなくて、雑誌のDumpListを打ち込んだものですけど、
      不思議と同じ特徴を持つノイズが奏でられるんですよね。

      初めて扱うソフトなので、それが無限ループなのか、処理に時間が掛かっているのか判断がつきづらかったので、
      この音には結構助けられました。

      親コメント
    • by Anonymous Coward

      多分、音が高すぎて聞こえないのでは?

    • by Anonymous Coward

      速すぎる&スライスされるため、余程長いループで無い限りはCPU使用率がなんとなくわかる程度じゃないでしょうか。
      ループにしたってイマドキじゃあ大半の処理時間が単調なループでも可笑しくないしな・・・

  • ループ脱出後 (スコア:1, おもしろおかしい)

    by Anonymous Coward on 2011年08月04日 11時52分 (#1997572)
    そのプログラムは正常に継続できるのだろうか?
    • by omen (42758) on 2011年08月05日 0時54分 (#1998003)

      原論文見ると、ループの外に追い出してやれば上手く復帰するソフトもあるみたい。
      まあ、ダメモト系ソフトなんだから、たまに成功してくれれば儲けものでしょ。
      完全に復帰しなくても、編集中のデータを保存するまででも持ってくれるだけでも助かることは多そう。

      親コメント
    • by Anonymous Coward

      まあ、ちょっと世界を改変してメガネっこになっちまうだけだ。

  • by duenmynoth (34577) on 2011年08月04日 12時12分 (#1997593) 日記
    こういう「ロジックのミスを自動でフォローしてしまう」ツールは良くないですね
    要するにバグの放置でしょう

    #ガベージコレクタのような手動では面倒なことを自動にするのならともかく
    • by Anonymous Coward on 2011年08月04日 13時30分 (#1997680)
      MCUにはwatch dog timerってのがありますよ。
      フリーランニングカウンタの一種で、定期的に書き替えないとカウンタが最大値まで達した時にNMIまたはリセットを発生させます。これを利用してプログラムが暴走したときに自動で初期化させます。自動車のECUなど高い信頼性が求められる製品にはたいてい載っています。
      親コメント
  • by SteppingWind (2654) on 2011年08月04日 13時08分 (#1997656)

    Jolt で全てのループ処理をチェックするとプログラムの実行時間が 7 〜 8 % 遅くなるという難点もある

    ループ処理とツールに認識されないように後ろ向きgoto文を使う…っと. で, 出来た物は古典的スパゲッティコード.

    えてして, こういう姑息なチューニングをするのが無限ループを仕込むんだよね.

    • by omen (42758) on 2011年08月04日 13時35分 (#1997687)

      そんな面倒な気遣いは不要。

      原論文 [mit.edu]を斜め読みしただけだけど、ループ中で少しでも状態が変わっていれば無限ループとして検出されることはないので、第二種過誤の心配はまずない。少なくとも私には、無限ループに陥った場合以外でループ先頭に戻る毎に同じ状態になる例が思いつかない。

      親コメント
      • by Anonymous Coward

        つまり
        for(;;) i++;
        としただけで(iはオーバーフローしないものとして)無限ループ検出できなくなるってこと?

      • by Anonymous Coward

        全くド素人の発想なんですが、何らかの入力があるまでとか、デバイスの状態に変化があるまで、無限ループで待ち続けるって事は無いのでしょうか。

        • by river (40534) on 2011年08月04日 14時19分 (#1997718) 日記

          ノンブロッキングのIOでポーリングしてる場合なんかはそうなるかもしれない。
          ただそんな厳密な、汎用的な用途を期待されるものでもないようで、論文の序にあるのは「ワードで文書書いてたら無限ループで止まってしまった。そこでデバッガでプログラムを止めて、プログラムカウンタをループの外に出して実行再開したところ、問題なく動き文書のセーブなどができた」という逸話で、しかし誰でもデバッガが使えるわけじゃないし、どっちにせよ面倒な作業なので、これを自動でやるツールを作りましたみたいに言っている。

          親コメント
  • by ken2 (27347) on 2011年08月04日 13時13分 (#1997662)
    ローラ「まってくださいませ。」
    ローラ「その あなたの たびに ローラも おともしとうございます。
        このローラも つれてって くださいますわね?」
    →いいえ
    ローラ「そんな ひどい……。」
    ローラ「その あなたの たびに ローラも おともしとうございます。
        このローラも つれてって くださいますわね?」
    →いいえ
    ローラ「そんな ひどい……。」

    このループから解放されるというのか!
    # 解放後の動作は結局「はい」のほうになるんだろうが。プログラムのバイナリコード上は。
  • by Hatris (33732) on 2011年08月04日 15時59分 (#1997775) 日記

    無限ループからの脱出ではないですけど、昔こんなソフト [impress.co.jp]がありましたなあ。

    極稀に復活することがありましたけど、基本的にヤブでした。
    青画面をフックして検出できるとしても、どうやって戻り先を決定していたんだろう。

  • by Anonymous Coward on 2011年08月04日 11時33分 (#1997556)
    任意のプログラムが無限ループしてるかどうか判定できるの?
    • Re:チューリング涙目 (スコア:2, おもしろおかしい)

      by digoh (17917) on 2011年08月04日 11時58分 (#1997577) 日記

      「キー入力があるまでループで待つ」ルーチンを作る
      →このツールのせいで待たずに次の処理に行ってしまう
       →このツールにより回避されたらキー入力の時点まで戻る、というパッチを当てる
        →「~まで戻る」というループをこのツールに発見され……

      親コメント
    • by Anonymous Coward
      別に任意のプログラムの低姿勢問題を解決する必要はないだろ。
      有限長テープのチューリングマシンが無限ループしてるかどうかは(テープの全パターンを網羅さえすれば)簡単に判別できる。
  • by Anonymous Coward on 2011年08月04日 11時43分 (#1997565)
    無限ループは、デバッグの初期の段階で見つけることができて、
    その後はほとんど出ないので問題にならない…



    と思ってたけど、そういば最近あったわ。見過ごされてた条件で
    運良く助かってた例が。なかなか起きない条件なのは間違いない
    けど。
    • by Anonymous Coward on 2011年08月04日 12時15分 (#1997597)

      無限ループは、デバッグの初期の段階で見つけることができて、
      その後はほとんど出ないので問題にならない…

      同感だなあ。
      たとえ個人のフリーウェアであっても、リリースされた段階のソフトウェアで
      無限ループが原因でフリーズしてる状況に遭遇する事は滅多にない気がする。
      極めて明らかなバグで、発生条件を適切に報告すれば直ぐに対応されそうな種のものだし。

      緊急回避としては有り難いツールかもしれませんが、日常的に使うものではなさそうですね。

      親コメント
  • by Anonymous Coward on 2011年08月04日 11時59分 (#1997578)

    せっかく13億回のループを作ったのに、10億回で無限ループだと判定されて勝手に切られちゃうんだよ

    みたいな被害が出ないかなあ。

    • >みたいな被害が出ないかなあ。
      むしろ使いかたとして、「ここでは無限ループを判定してくれるな」という場所にディレクションを与える気がします。
      予想してない枝葉末節のコード部のうっかりを検出してくれるだけでも、便利そうなツールではありますよね。

      それか、単純に「このパラメータが更新されている限り無限ループと判定しない」とか。
      しかし実際問題、解の収束に時間のかかる反復計算は、人間ですら収束判定に迷うので(百万分の一を割ったら収束とか)、
      解が収束せず発散して無限ループに陥っているかを判定するのに使うのは、複雑なアルゴリズムの場合無理なんじゃないかなあ、と。
      #わざわざニュースとして取り上げられているということは、
      #その辺りにある程度の指針をもったツールを作れたということかもしれませんが。もしそうなら詳しいかた、解説希望します。

      親コメント
    • by Anonymous Coward

      ですよね。
      プログラミングを始めて二日目に円周率を計算しようとして、
      Hello World みたいに即座に結果が出ないからバグだと思って
      何度も書き直すとか、よくあります。
      人間にわからないことが機械にわかるか!(矛盾

  • by Anonymous Coward on 2011年08月04日 12時25分 (#1997609)

    無限ループも3秒で抜けるぜ。

  • by Anonymous Coward on 2011年08月04日 12時32分 (#1997620)
    for(int i=0;;i++);
  • by Anonymous Coward on 2011年08月04日 13時50分 (#1997699)
    ジョルトコーラ飲みたくなってきた
typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...