未保存のフリーズしたアプリをデバッガで復帰させてみた

たまに、Officeや、 Borland C++ Builder でアプリケーションがフリーズしてしまい データ保存してないのに>< ってなることがあります。

アプリがフリーズして文書が保存できない時に諦めずに試すべき4つの事

以前紹介した方法でも、復帰できないようなケースで、アプリケーション自体が本当にハングアップしている場合、デバッガを使用すると復帰できる望みがあるので、実演してみました。
(記事のデータをファストサーバーじゃないんですがふっ飛ばしてしまったので、画像ファイルが少し足りませんがご容赦を(^ω^;)

bcc2
Visual Studioなどのデバッガアプリケーションには「プロセスをアタッチする」機能があります。

これで、プログラムがどういう挙動をしているか見ます。

アタッチできたら、ブレークしてみて、どこで関数がとまっているかを特定します。

コールスタック。もしくは呼び出し履歴と呼ばれるところに、ブレークポイントを仕掛けて見ます。
ひとつ上位の履歴にブレークポイントを仕掛けて、プログラムを実行して、制御が戻ってきたら、問題なし。ひとつずつ繰り上げていきます。

bcc
ここでは、 comp32p.dllの 00C65C1F の分岐の下のpop esi にブレークポイントを仕掛けておいたのですが、いつまで経っても、ここに制御が返ってこないので、何らかのバグがあると判断しました。

無理やり、実行アドレスを変更します。
EIP を変更するのが一般的ですが、 Visual Studio では、次のステートメントの設定というのでカーソル行に設定できます。

試したところ、無事制御が戻ってきて、「応答なし」だったアプリが操作できるようになり、保存することができました。

# 予断ですが、うちのPCに今日発生した惨事
bcc3

デスクトップユーザープロファイルフォルダとプログラムフォルダがすっかりきれいな状態に|。・ω・)しょんぼり

おすすめ

1件の返信

  1. 可愛毬也 より:

    誤変換が惨事の深刻さを物語ってますか…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です