none
リモートデバックとインターネット RRS feed

  • 質問

  • ユーザーからの要望でトラブっているとき、インターネットを介してどこからでもパソコンのプログラムの動作状態を見てもらえないだろうか?という依頼がありました。

    単純にすぐ近くであればHUBとLANケーブルなどがあれば別のパソコンからリモートデバックできるのでしょうが、インターネットを介してとなるとできるのかどうか不明です。

    VS2015ではインターネットを介したリモートデバックは不可能と記載がありました。(自分が使っているのはVS2017)

    https://msdn.microsoft.com/ja-jp/library/y7f5zaaa.aspx?f=255&MSPPError=-2147217396

    そこで質問です。皆さんはこのような依頼があった場合どのように対応されていますか?

    2017年7月12日 23:54

回答

  • まずは再現性があるかどうかを確かめることが先だと思いますよ。再現性があれば比較的楽なのですが、何かの条件が揃った時にエラーが出るというのはユーザーでもなかなか気づきにくいことがあります。
    私の経験で、以下のことがありました。
    ある改修の影響で一部のエラーチェックが外れてしまい、ユーザーがその項目に値を入れ忘れて登録ボタンを押すとエラーで落ちるというものでした。ユーザーは普通はその項目に値を入れますので普段はエラーにならないのですが、たまに入れ忘れてエラーになり、不定期にエラーが発生するという原因が特定しにくいものでした。登録時のエラーですので、不正なエラーは存在しておらず、データを調べてもわかりませんでした。
    こういうケースもありますので、エラー原因特定の参考になれば幸いです。
    また、イベントログのアプリケーションログに何か出ている可能性もあり、それがヒントになることもあります。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク saiking 2017年7月14日 7:13
    2017年7月14日 6:49
    モデレータ

すべての返信

  • 一般論として、デバッガーはプログラムの実行を制御しますが、プログラムを操作するものではありません。デバッグ対象のPCで操作する必要があります。

    さてリモートデバッグとのことですが、手元でデバッグをする際に、ユーザーにPCを操作してもらうことを想定されているのでしょうか? 話を読む限りリモートデバッグは非現実的に感じました。

    2017年7月13日 0:59
  • そうなんです。トラブル発生時、オペーレーションを再開して、トラブルの再現した時に原因を追究して直してほしいということなんです。現実的なのは必要なデータを吸い上げてメールか何かで送ってもらってこちらでデバックするのが現実的な気がしています

    2017年7月13日 7:24
  • 再現用のデータ・手順が手に入るのが一番ですが、あとは診断用のログを埋めていくとかですかね…。
    2017年7月13日 13:23
    モデレータ
  • 質問者さんの想定する「リモートデバッグ」に近い機能であれば、Windowsにはリモートアシスタンス接続が提供されています。ただし、リモートデバッグであれリモートアシスタンス接続であれ、ユーザーは接続を拒否することが多いので、どちらも選択肢に上がることは稀です。また、ファイアウォール等でそもそも接続が不可能なネットワーク構成も往々にしてあります。

    結局、Azuleanさんが言及されているように、再現データや診断ログに頼りますが、それでも解決しない場合はダンプ解析を行ったりもします。

    2017年7月13日 21:03
  • 診断用のログを埋めていくとはどういうことでしょう?必要な変数やどこを通過したかファイルに残しておくということでしょうか?
    2017年7月14日 2:35
  • リモートアシスタント接続ですか。realVNCなんかも考えてみたのですが、

    ・インターネットと繋ぐのはどうするのか?(設定やアクセスポイント)

    ・レスポンスはどうなのか?

    どちらかといえば、以下を吸い上げ用のバッチなどでUSBに吸い上げて、メールなどで送ってもらって解析するのがよさそうですね。

    ・再現データ(データは大きくない)

    ・診断用のログ(Azuleanさん推奨)

    ・ダンプ解析(佐祐理さん推奨 **まだ解析の仕方は分かってないですが)

    2017年7月14日 2:57
  • まずは再現性があるかどうかを確かめることが先だと思いますよ。再現性があれば比較的楽なのですが、何かの条件が揃った時にエラーが出るというのはユーザーでもなかなか気づきにくいことがあります。
    私の経験で、以下のことがありました。
    ある改修の影響で一部のエラーチェックが外れてしまい、ユーザーがその項目に値を入れ忘れて登録ボタンを押すとエラーで落ちるというものでした。ユーザーは普通はその項目に値を入れますので普段はエラーにならないのですが、たまに入れ忘れてエラーになり、不定期にエラーが発生するという原因が特定しにくいものでした。登録時のエラーですので、不正なエラーは存在しておらず、データを調べてもわかりませんでした。
    こういうケースもありますので、エラー原因特定の参考になれば幸いです。
    また、イベントログのアプリケーションログに何か出ている可能性もあり、それがヒントになることもあります。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク saiking 2017年7月14日 7:13
    2017年7月14日 6:49
    モデレータ
  • 診断用のログを埋めていくとはどういうことでしょう?必要な変数やどこを通過したかファイルに残しておくということでしょうか?

    そういうことです。
    フレームワークとして用意されているわけでもないので、自分が必要かもしれないと思うところに入れていくか、アスペクト志向(AOP)的なソリューション(PostSharp など)を使うかですね。

    ダンプファイルではそれを採取した瞬間のメモリなどから解析できるところはわかりますが、それに至った経緯までは読み取れないこともあるため。
    (ダンプファイル解析自体はそれで有用だと思いますので、採取・提供されるのであればトライする価値はあると思います)

    2017年7月14日 15:03
    モデレータ