2

特定のカスタム タイマー (インストールおよびアクティブ化) をデバッグするために、次の手順を試しました。

  1. .dll.pdbファイルの両方を GAC にコピーしました。
  2. タイマーサービスを再開しました。
  3. w3wpOWSTimer.exeプロセスの両方を添付。

しかし、デバッグはまだ行われていません。配置されたデバッガーは、次のメッセージを表示する空の円です。

ブレークポイントは現在ヒットしません。このドキュメントのシンボルは読み込まれていません。

OWSTimer は diff ユーザー名で表示されます。自分のアカウントから実行する必要がありますか?

デバッグが機能しないのはなぜですか?

4

5 に答える 5

12

タイマー ジョブのデバッグは難しい場合があります... 手順はほぼ正しいように聞こえますが、さらに多くのことを行うこともできます。

  1. タイマー ジョブは OWSTimer.exe で実行されます - そのジョブにアタッチするだけで済みます
  2. タイマー サービスを再起動します。適切な対策として、再起動、展開、再起動、iisreset;-)
  3. DEBUG ビルドまたは RELEASE ビルドを行いましたか?
  4. 実際にタイマージョブを実行していることを確認してくださいトリガーするように)

それでもブレークポイントにヒットしない場合は、醜いことをしてください:コード内でDebugger.Launch()orを使用するかDebugger.Break()、常に失敗するアサーションを使用します。System.Diagnostics.Trace.Assert(false);

そして、レスキュー用の MSDN があります。

于 2011-09-20T10:08:53.443 に答える
1

デバッグ シンボルを手動で読み込んでみて、内容を確認してください。

モジュール ウィンドウを中断モードまたは実行モードで表示するには

[デバッグ] メニューで [ Windows ]を選択し、[モジュール] をクリックします。

デフォルトでは、[モジュール] ウィンドウはモジュールを読み込み順に並べ替えます。ただし、任意の列で並べ替えることができます。

[モジュール] ウィンドウで、デバッグ シンボルが読み込まれているモジュールを確認できます。この情報は、[シンボル ステータス] 列に表示されます。ステータスが「読み込みをスキップしました PDB ファイルが見つからないか開けません」または「読み込みを含める/除外設定により無効にしました」という場合は、デバッガーに Microsoft パブリック シンボル サーバーからシンボルをダウンロードするか、コンピューターのシンボル ディレクトリからシンボルを読み込むように指示できます。詳細については、「方法: シンボル サーバーを使用する」および「方法: シンボルの場所と読み込み動作を指定する」を参照してください。

シンボルを手動でロードするには

[モジュール] ウィンドウで、シンボルが読み込まれていないモジュールを右クリックします。

[シンボルの読み込み元] をポイントし、[Microsoft シンボル サーバー] または [シンボル パス] をクリックします。

MSDNからコピー

念のため (コマンド プロンプトから) Visual Studio キャッシュを削除することもできます。

del /Q %LOCALAPPDATA%\Microsoft\WebsiteCache
del /Q %LOCALAPPDATA%\Temp\VWDWebCache
del /Q %LOCALAPPDATA%\Microsoft\Team Foundation\1.0\Cache
于 2011-09-20T10:31:00.833 に答える
0

地域設定が正しいことを確認してください - /_layouts/15/regionalsetng.aspxCA URL に追加してください。タイムゾーンが間違っていると、ジョブが過去の時間にスケジュールされている可能性があります。これは私を何度も電話を切りました。この場合は、正しいタイム ゾーンを設定し (上記の URL を使用)、タイマー サービスを停止して開始します (サービス ツールまたはコマンド ラインを開く -net stop sptimerv4その後net start sptimerv4)。次に、OWSTIMER にアタッチしてデバッグします。

于 2014-03-24T20:03:52.287 に答える
0

moontear の投稿に追加するだけです。

このコードを Execute メソッドの最初の行に追加するまで、同じ読み込みデバッグ シンボルの問題がありました。

    public override void Execute(Guid contentDbId)
    {
        // If in debug mode, trigger a false assertion to give time 
        // to attach the debugger to the OWSTIMER.EXE process.
        #if (DEBUG)
            System.Diagnostics.Trace.Assert(false);
        #endif
        ...
于 2012-02-29T22:51:58.473 に答える