問題タブ [outputdebugstring]
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.
multithreading - Delphiでは、OutputDebugStringスレッドは安全ですか?
は
スレッドセーフ?
私/私たちはデバッグのためにスレッドでそれを使用してきました、そして私がそれを別の方法で行うべきであるかどうか私には決して起こりませんでした。
(Delphi 7)
debugging - Windows Mobile 6.0 での BugTrap と RapiDbg
PocketPC 2003 (Windows CE 4.21) を実行する PDA から Windows Mobile 6 (CE 5.2) を実行する PDA にドライバといくつかのアプリケーションを移植しようとしています。
Platform BuilderまたはカスタムOSイメージを使用する以外に、ドライバーによって行われたOutputDebugString呼び出しをログに記録できるかどうか、またはその方法を知っている人はいますか?
移植は 99% 完了していますが、ドライバー レベルで発生していることをトラブルシューティングしてデバッグする必要があります。
これまで、BugTrap (columbo) と RapiDbg の組み合わせにより、Platform Builder を必要とせずにドライバーをデバッグできました。すべてのファイルをキャプチャし、OutputDebugString
開発マシンの activesync 経由でプルして、そこから作業することができました。
どうやらbugtrap.exeは WM6 で実行されず (クラッシュします)、新しいバージョンが見つかりません。
Platform Builder または OS のデバッグ イメージを必要とせずに OutputDebugString 呼び出しをトラップする (ファイルにダンプする、USB 経由でホストに送信するなど) 方法はありますか?
私は tracetool フレームワーク (sourceforge を参照) を使用しようとしました。ODS 呼び出し (幸いなことに、私のデバッグ ステートメントはすべてマクロを使用しています) をそのフレームワークに置き換えました。Trace::Debug()->Send
通常の DLL とアプリケーションは期待どおりに動作しますが、ドライバーは動作しません。
c++ - OutputDebugString + DebugView = タブではありません!
OutputDebugString を使用して \t で区切られたデータをダンプし、ex-Sysinternals DebugView を使用してキャプチャします。
問題は、DebugView のすべてのデータがスペースで区切られているように見えるため、使用する前に CTRL+H "\x20" "t" を実行してスペースをタブに置き換える必要があることです (本当にタブ区切りのデータが必要です)。
タブをスペースに置き換えないように DebugView に指示する方法はありますか? それとも、OutputDebugString 関数の出力をキャプチャするためのより良いツールが利用できるでしょうか?
どんなアイデアでも大歓迎です!
c++ - std::cout.rdbuf() を呼び出すと、構文エラーが発生します
何かを見逃したのかもしれませんが、Visual Studio 2008 で rdbuf() プロシージャが表示されない理由がわかりません。これが私のコードです:
BufferedStringBuf クラスはこのページからのものです: http://www.devmaster.net/forums/showthread.php?t=7037
次のエラーが発生します。
...src\main.cpp(19) : error C2143: syntax error : missing ';' before '.'
私がしたいのは、OutputDebugString() を使用して std::cout を Visual Studio 出力ウィンドウにリダイレクトすることだけです。
c# - OutputDebugStringからの出力をVisualStudioの出力ウィンドウで表示できますか?
C#とVisualStudio2010を使用しています。
OutputDebugString
デバッグ情報の書き込みに使用する場合、出力ウィンドウに表示する必要がありますか?
DebugViewからの出力を確認できますがOutputDebugString
、 VisualStudioの[出力]ウィンドウに表示されると思いました。メニューツールの下を見ましたか?オプション?デバッグ?一般、および出力はイミディエイトウィンドウにリダイレクトされていません。メニューツール*もご覧になりましたか?オプション?デバッグ?出力ウィンドウとすべての一般出力設定は「オン」に設定されています。最後に、[出力]ウィンドウのドロップダウンリストを使用して、デバッグメッセージを表示するように指定しました。
メニューツールを変更した場合*?オプション?デバッグ?一般に、出力をイミディエイトウィンドウにリダイレクトする場合、OutputDebugString
メッセージはイミディエイトウィンドウに表示されません。
これが私のテストプログラム全体です。
デバッガー内で実行すると、Debug.WriteLine
出力は出力ウィンドウに表示されますが、出力は表示されOutputDebugString
ません。
コンソールウィンドウから実行すると、両方がDebugViewDebug.WriteLine
に表示されます。OutputDebugString
OutputDebugString
出力が出力ウィンドウに表示されないのはなぜですか?
最終的に、私の意図は、で多くのデバッグ出力を書き込むことではなく、OutputDebugString
System.DiagnosticsまたはNLogなどを使用します。書き込み用にロギングプラットフォームを構成した場合OutputDebugString
、出力がデバッガー内から表示されるかどうかを調べようとしています。
ファイルを使用TraceSources
してTraceListeners
構成した元のプログラム(上記の単純なテストではありません)に戻りました。app.config
に書き込むようにトレースソースを構成するとSystem.Diagnostics.DefaultTraceListener
(書き込みとして文書化されていますOutputDebugString
)、トレースソースの出力はデバッグウィンドウに移動します。ただし、(私の単純な例のように)直接書き込む行はOutputDebugString
、デバッグウィンドウに移動しません。また、(CodeplexのUkadc.Diagnosticsから取得した)TraceListener
書き込みを行う別のものを使用した場合、その出力はデバッグウィンドウに移動しません。OutputDebugString
Ukadc.Diagnosticsトレースリスナーに関する1つの注意...Ukadc.Diagnosticsには、出力のカスタムフォーマットを可能にするいくつかのトレースリスナーが含まれています(log4net、NLog、およびLABで使用可能なフォーマットと同様)。したがって、Ukadc.Diagnosticsに「のみ」依存する場合、「標準」の.NET診断ログを使用できますが、おそらくはるかに大きなプラットフォームに依存することなく、いくつかの高度な機能(出力フォーマットなど)を取得できます。この場合、Ukadc.DiagnosticsOutputDebugStringTraceListener
を使用して、ファイルに書き込む場合と同じ形式(必要に応じて、または別の形式)でログ出力をデバッグウィンドウに書き込むことができます。
私はこれらの質問を見ましたが、それらは実用的な解決策を提供しなかったことに注意してください:
delphi - Delphi 7でOutputDebugStringをバイパスしますか?
OutputDebugStringをバイパスすることは可能かどうか疑問に思っていますか?OutputDebugString出力を、内部のDelphiイベントビューアウィンドウではなく、DebugViewに表示したいのですが。しかし、OutputDebugStringを飲み込まないようにDelphiに指示する方法が見つかりません。何か案は?
よろしく
delphi - Delphi での OutputDebugString 呼び出しのデバッグ
アプリケーションで「T」を出力する「不正な」OutputDebugString呼び出しがありますが、それを見つけることはできません。
OutputDebugString 関数にブレークポイントを設定して、どこから呼び出されているかを確認することはできますか?
Delphi 2009 を使用しています。
c# - Win32 APIを介したグローバル(セッション0)OutputDebugStringメッセージのキャプチャを発行しますか?
私は現在、OutputDebugStringメッセージをキャプチャするための単純なアプリケーションに取り組んでいます(Windows Sysinternals DbgViewまたはDBMon.NETに類似しています)。ローカルセッション(つまり、Local \ DBWIN_BUFFER_READY、Local \ DBWIN_DATA_READY、Local \ DBWIN_BUFFER)からOutputDebugStringメッセージにアクセスすると、すべてが期待どおりに機能します。
ただし、セッション0からの出力(つまり、Global \ DBWIN_BUFFER_READYなど)にアクセスしようとすると、出力が返されません。DbgViewの動作に基づいて、アプリケーションをある程度の管理者権限で実行する必要があることを前提に運用しています。SecurityDescriptorを正しく構成していないか、Global OutputDebugStringメッセージにアクセスするための何かが完全に欠落していると思っています(次のように読んでください...私は今や問題について少し迷っています)。
以下にコードのスニペットを強調表示しましたが、完全なソースはCodePlexにあります。
この問題に関するヘルプや洞察をいただければ幸いです。前もって感謝します!
セキュリティ記述子の構成
いくつかの異なる構成を試しましたが、コミットされたコードは現在次のようになっています。
このコードは、予想どおり、最終的にDbWinMessageSourceクラスのセットアップで呼び出されます...
SecurityAttributesとイベント
現在CodePlexでコミットされているコードは、Local \ **プレフィックスを使用していますが、唯一の違いは、私が理解している限り、Local\**がGlobal\**に置き換えられていることです。ただし、これは期待どおりに出力をキャプチャしていないようです。繰り返しますが、関連するコードスニペット...
繰り返しますが、最終的には次のようにDbWinMessageSourceのセットアップで呼び出されます。
私は、OutputDebugStringアペンダーが構成されたLog4Netを使用する単純なWebアプリケーションでテストしています。Visual Studioを介してアプリケーションを実行しているときは、期待どおりにすべてのローカル出力をキャプチャします。アプリケーションをIISに移動し、グローバルセッションで何かをキャプチャするようにコードを構成すると、何も得られません。DbgViewがIISからの出力を期待どおりにキャプチャしていることを確認しました(したがって、これは間違いなく私が間違っていることです)。
うまくいけば、それで十分なコンテキストですが、より多くの情報や詳細が必要な場合は、お知らせ下さい。
注:違いが生じる場合は、Windows7Professionalで開発してください。
編集
Tyranid(およびLuke)が指摘しているように、必要なのは管理者権限とSE_CREATE_GLOBAL_NAMEだけです。さらにいくつかのテストを実行しましたが、上記のコード設定は実際にいくつかのグローバルメッセージをキャプチャしています(たとえば、IISRESET中)。ただし、上記のコードは、アプリケーションがIIS内で実行されている場合(VSセッション中にLocal \ **を介してルーティングされる場合)、Log4NetOutputDebugStringアペンダーからデータをキャプチャしていません。すべてのWin32API呼び出しは正常に返され、呼び出し時にエラーも返されません。Marshal.GetLastWin32Error().
適切な方法として、現在のWindowsトークンにSE_CREATE_GLOBAL_NAMEがあることを確認するためのコードを追加しました。ラフインされたコードは次のようになりました。
これに関するさらなる洞察をいただければ幸いです。
c# - サービスから OutputDebugString を受け取るにはどうすればよいですか?
次のコードを使用して、すべてのOutputDebugStringメッセージ (サービスからのものを含む) をキャッチしようとしています。Windows 7 に移行するまでは問題なく動作していました。
問題は、Windows Vista のサービスが低レベルのセッション #0 で実行されているため、キャッチできないという人もいれば、キャッチできないという人もいるということです。どう思いますか?
セッション #0 からOutputDebugStringメッセージを受信できるようにいくつかの権限を増やして、次のコードを変更することは可能ですか? 言い換えると; セッション #0 の DBWIN_BUFFER をセッション #1 と共有することはできますか?
たとえば DebugView がそれを行うことができ、セッション #0 から GUI が実行されているセッション #1 にそれらのメッセージを (たとえば名前付きパイプを介して) 送信するサービスヘルパーが表示されないため、可能であると言えます。
問題は、セキュリティ設定の IMO です。誰かがそれらを変更する方法を提案できますか?
セキュリティ属性は Windows API 全体に共通であり、C# には多くのフォロワーがいるため、コードが Delphi にある場合でも C# タグを追加しました :)
visual-studio - VisualStudio2008の出力ウィンドウをフィルター処理する方法
OutputDebugStringから送信されるメッセージをVS2008の出力ウィンドウにフィルタリングする方法を探しています。大規模なシステムを変更していて、ログ内のメッセージにのみ関心があります。
出力がVSの外部であってもかまいません。実際、そうすることをお勧めします。SysInternals.DebugViewを使用すると、メッセージを簡単にフィルタリングできますが、アプリがVS 2008でデバッグされている場合、その出力がDebugViewに到達することはありません。