問題タブ [system.diagnostics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 外部exeを起動してコントロールを見つけ、そのコンテンツを取得できますか?
作成していない外部exeを起動して、そのフォームのコントロールを見つけることができますか。次に、そのコントロールの内容(文字列のみ)を取得しますか?
HTML / RTFボックス内のデータを暗号化したソフトウェアを起動してから、アプリケーションからデータを削除したいと思います。
これは可能ですか?もしそうなら、どの言語ですか?
ジェレミー。
.net - .Net メソッド情報を取得する方法 PerformanceCounterCategory CategoryHelp を英語ではなく別の言語で表示する
私は英語のネイティブ スピーカーではありません。私の言いたいことを理解していただければ幸いです。私が書いたちょっとしたPowershellコード
カウンタとカテゴリの説明を表示
これにより、CounterHelp と Category Help が英語の説明で表示されます。英語の Windows を使用していても、そのカウンターまたはカテゴリのドイツ語の説明を取得する方法。ドイツの Windows で試してみましたが、うまくいきませんでした。英語のウィンドウでそれができない場合。ドイツ語のWindowsで何が間違っていましたか? どうもc# - C# VS2010 アプリケーションでデバッグ中かどうかを判断する
C# アプリケーションで、現在デバッグ中かどうかを判断する機会はありますか? アイデアは、タイムアウトなどを無視するか、追加情報を提供することです。
これを明確にするために、条件付きコンパイラ フラグについて話しているのではありませんDEBUG
。これにより、コードのコンパイル方法を決定できます。デバッガーで実行されているかどうかについての情報はありません。
コンパイル時ではなく、実行時に決定する必要があります。
.net - .net 2010 のトレースと app.config を理解できない
app.config で、詳細、警告、なしの 3 つのトレース レベル (スイッチ?) を設定したいと考えています。コードのデバッグ バージョンでは、verbose スイッチをアクティブにしたいのですが、リリースでは警告が必要です。特殊なケースでは、アプリケーション ユーザーは構成ファイルを変更してすべてのトレースを無効にすることができます。
デバッグ トレースはコンソールに出力し、リリース トレースはログ ファイルにのみ出力したい。
私は、次のように書いています。
次に、コードで次のように trace を呼び出します。
[...]
私が思うに欠けているものがあります。Trace メソッドに使用する適切なスイッチを指定するにはどうすればよいですか?? アプリケーション ユーザーが構成ファイルを変更してトレースを許可または無効にするにはどうすればよいですか?
ありがとう。
.net - カスタムトレースリスナーでトレース呼び出しとデバッグ呼び出しを区別するにはどうすればよいですか?
Trace.ListenersとDebug.Listenersは同じ内部コレクションを共有しているため、トレースリスナーをTrace.Listenersに追加し、デバッグリスナーをDebug.Listenersに追加してそれらを区別することはできません。
どうすればこれを達成できますか?
編集:
これを実行したいのは、アプリケーションにログレイヤーを書き込んでいて、Debug / Traceが2つのログソースであるシステム全体でさまざまなログを追跡したいからです(他にもいくつかのソースがあります)。 )追跡したい。
c# - CorrelationManager.LogicalOperationStackはParallel.For、Tasks、Threadsなどと互換性がありますか
背景情報については、次の質問を参照してください。
タスク並列ライブラリのタスクはActivityIDにどのように影響しますか?
その質問は、タスクがTrace.CorrelationManager.ActivityIdにどのように影響するかを尋ねます。@Greg Samsonは、ActivityIdがタスクのコンテキストで信頼できることを示すテストプログラムで自分の質問に答えました。テストプログラムは、タスクデリゲートの最初にActivityIdを設定し、スリープして作業をシミュレートし、最後にActivityIdをチェックして、同じ値であること(つまり、別のスレッドによって変更されていないこと)を確認します。プログラムは正常に実行されます。
スレッド化、タスク、および並列操作のための他の「コンテキスト」オプションを調査しているときに(最終的にはロギングのコンテキストを改善するため)、Trace.CorrelationManager.LogicalOperationStackで奇妙な問題に遭遇しました(とにかく奇妙でした)。以下の彼の質問に対する私の「答え」をコピーしました。
私が遭遇した問題を適切に説明していると思います(Parallel.Forのコンテキストで使用すると、Trace.CorrelationManager.LogicalOperationStackが明らかに破損している(または何か)が、Parallel.For自体が論理演算で囲まれている場合のみ) 。
これが私の質問です:
Trace.CorrelationManager.LogicalOperationStackはParallel.Forで使用できる必要がありますか?もしそうなら、Parallel.Forが開始されたときに論理演算がすでに有効になっている場合、それは違いを生むべきですか?
Parallel.ForでLogicalOperationStackを使用する「正しい」方法はありますか?このサンプルプログラムを別の方法でコーディングして、「機能」させることはできますか?「動作する」とは、LogicalOperationStackには常に予想される数のエントリがあり、エントリ自体が予想されるエントリであることを意味します。
ThreadsとThreadPoolスレッドを使用していくつかの追加のテストを実行しましたが、同様の問題が発生したかどうかを確認するために、戻ってそれらのテストを再試行する必要があります。
Task / ParallelスレッドとThreadPoolスレッドは、親スレッドからTrace.CorrelationManager.ActivityIdとTrace.CorrelationManager.LogicalOperationStackの値を「継承」しているように見えます。これらの値は、(SetDataではなく) CallContextのLogicalSetDataメソッドを使用してCorrelationManagerによって格納されるため、これは予想されます。
繰り返しになりますが、この質問に戻って、以下に投稿した「回答」の元のコンテキストを取得してください。
タスク並列ライブラリのタスクはActivityIDにどのように影響しますか?
MicrosoftのParallelExtensionsフォーラムで、この同様の質問(これまでのところ回答されていません)も参照してください。
[貼り付けを開始]
これは実際にはあなたの質問に対する答えではないので、私の投稿を答えとして許してください。ただし、CorrelationManagerの動作やスレッド/タスクなどを扱っているため、あなたの質問に関連しています。私は、CorrelationManager LogicalOperationStack
(およびStartLogicalOperation/StopLogicalOperation
メソッド)を使用して、マルチスレッドシナリオで追加のコンテキストを提供することを検討してきました。
私はあなたの例を取り上げ、Parallel.Forを使用して並行して作業を実行する機能を追加するために少し変更しました。また、私はStartLogicalOperation/StopLogicalOperation
(内部的に)ブラケットに使用しDoLongRunningWork
ます。概念的にDoLongRunningWork
は、実行されるたびに次のようなことを行います。
これらの論理演算を(多かれ少なかれそのまま)コードに追加すると、すべての論理演算が同期されたままになることがわかりました(常にスタック上の予想される演算数とスタック上の演算の値は常に次のようになります)期待される)。
私自身のテストのいくつかでは、これが常に当てはまるとは限らないことがわかりました。論理演算スタックが「破損」していました。私が思いついた最も良い説明は、「子」スレッドが終了するときにCallContext情報を「親」スレッドコンテキストに「マージ」すると、「古い」子スレッドコンテキスト情報(論理操作)が「別の兄弟の子スレッドによって継承されました」。
この問題は、Parallel.Forが明らかにメインスレッド(少なくともサンプルコードでは、記述されているとおり)を「ワーカースレッド」(または並列ドメインで呼び出されるもの)の1つとして使用しているという事実に関連している可能性があります。DoLongRunningWorkが実行されるたびに、新しい論理操作が開始(開始時)および停止(終了時)されます(つまり、LogicalOperationStackにプッシュされてポップバックされます)。メインスレッドですでに論理演算が有効になっていて、DoLongRunningWorkがメインスレッドで実行されている場合、新しい論理演算が開始されるため、メインスレッドのLogicalOperationStackには2つの演算があります。DoLongRunningWorkの後続の実行(DoLongRunningWorkのこの「反復」がメインスレッドで実行されている限り)は、(明らかに)メインスレッドを継承します。
私の例では、LogicalOperationStackの動作が、変更したバージョンの例と異なる理由を理解するのに長い時間がかかりました。最後に、私のコードではプログラム全体を論理演算で囲んでいたのに対し、テストプログラムの修正バージョンではそうではなかったことがわかりました。これは、私のテストプログラムでは、「作業」が実行されるたびに(DoLongRunningWorkに類似)、すでに論理演算が有効になっていることを意味します。テストプログラムの修正バージョンでは、プログラム全体を論理演算で囲んでいませんでした。
したがって、プログラム全体を論理演算で囲むようにテストプログラムを変更したとき、およびParallel.Forを使用している場合は、まったく同じ問題が発生しました。
上記の概念モデルを使用すると、これは正常に実行されます。
明らかに同期していないLogicalOperationStackが原因で、これは最終的にアサートされますが、次のようになります。
これが私のサンプルプログラムです。これは、ActivityIdとLogicalOperationStackを操作するDoLongRunningWorkメソッドがあるという点であなたのものと似ています。DoLongRunningWorkのキックには2つのフレーバーがあります。1つのフレーバーはParallel.Forを使用するタスクを使用します。各フレーバーは、並列化された操作全体が論理操作で囲まれるかどうかに関係なく実行することもできます。したがって、並列操作を実行するには、合計4つの方法があります。それぞれを試すには、目的の「Use ...」メソッドのコメントを解除し、再コンパイルして実行します。 UseTasks
、、UseTasks(true)
およびUseParallelFor
すべてが完了するまで実行する必要があります。 UseParallelFor(true)
LogicalOperationStackには予想される数のエントリがないため、ある時点でアサートされます。
LogicalOperationStackをParallel.For(および/または他のスレッド/タスク構造)で使用できるかどうか、またはどのように使用できるかというこの問題全体は、おそらく独自の質問に値します。多分私は質問を投稿します。それまでの間、これについて何か考えがあるかどうか疑問に思います(または、ActivityIdは安全であると思われるため、LogicalOperationStackの使用を検討したかどうか疑問に思います)。
[貼り付け終了]
誰かがこの問題について何か考えを持っていますか?
c# - Moq で TraceListener をモックする
Moq Verify が「Moq.MockException : モックで呼び出しが実行されませんでした」で失敗するのはなぜですか?
.net - Tracing と Logger.NET、Enterprise Library、log4net、または Ukadc.Diagnostics をいつ使用する必要がありますか?
標準トレース、Logger.NET、Enterprise Library、log4net、または Ukadc.Diagnostics のいずれかを選択するにはどうすればよいですか?
一方が他方よりも適切な状況はありますか? ...それは何でしょう?(ASP.NET、コンソール アプリ、Azure クラウド、SOHO、エンタープライズ...)
メリットやデメリットは?
他の主要なロギング フレームワークを見逃していませんか?
c# - サーバーの稼働時間を計算すると、「ネットワーク パスが見つかりませんでした」というメッセージが表示される
次のコードでは、取得しています
System.ComponentModel.Win32Exception: ネットワーク パスが見つかりませんでした
誰でも助けることができますか?
編集:マシン名で試しましたが、それでも同じエラーが発生します! 注: 1.2.3.4 はサンプル値です。
c# - Process.Exitedイベントの受信時に親プロセスGUIを更新する-WPF
アプリケーション内でプロセスを起動しようとしています。以下のコードは、メインGUIのボタンをクリックするとメモ帳を起動するだけです。これで、メモ帳を起動するとボタンが無効になります。プロセスをサブスクライブしました。メモ帳アプリケーションが閉じたときに通知を受け取るために終了しました。通知を受け取ったら、ボタンを再度有効にします。
ただし、button1.IsEnabled = true;を呼び出すと、コードがクラッシュしました。Process.ExitはメインGUIスレッドの一部ではないようです。そのため、その中でGUIを更新しようとすると、クラッシュしました。また、デバッグ中は、外部などからメインスレッドにアクセスしようとしているという例外は発生しません。
子プロセスが終了したときにGUIに通知する方法はありますか?