0

共有ライブラリをプロセスに挿入し (ptrace()その部分を実行するために使用しています)、共有ライブラリからの出力を、何らかの形式の IPC を使用して作成中のデバッガーに戻すことができるようにしたいと考えています。私の本能はパイプを使用することですが、実際の要件は次のとおりです。

  • 通信を容易にするためにファイルシステムに何かを保存したくありません。通信はデバッガーが実行されている間だけ続くからです。
  • 移植可能な Unix ソリューションが必要です (したがって、Unix 標準のシステムコールが理想的です)。

私が遭遇している問題は、私が見る限りpipe()、デバッガーを呼び出すと、パイプの「送信」側をターゲットプロセスに渡す方法がなく、その逆も受信側であるということです。共有メモリを設定できましたが、両方のプロセスからメモリ セグメントを参照できるように、どこかにファイルを作成する必要があると思います。他のデバッガーは、既に実行を開始した後にプロセスにアタッチするときに、どのように出力をキャプチャしますか?

4

2 に答える 2

0

I assume that you are in need of a debugging system for your business logic code (I mean application). From my experience, this kind of problem is tackled with below explained system design. (My experience is in C++, I think the same must hold good for the C based system also.)

  1. Have a logger system (a separate process). This will contain - logger manager and the logging code - which will take the responsibility of dumping the log into hard disk.
  2. Each application instance (process running in Unix) will communicate to this process with sockets. So you can have your own messaging protocol and communicate with the logger system with socket based communication.
  3. Later, for each of this application - have a switch which can switch off/on the log.So that you can have a tool - to send signal to this process to switch on/off the message logging.

At a high level, this is the most generic way to develop a logging system. In case you need any information - Do comment it. I will try to answer.

于 2013-06-24T06:51:15.297 に答える
0

より良い検索用語を使用すると、この質問はこれらの人たちの複製であることがわかりました。

一番の答えは私が探していたものでした。Unix ドメイン ソケットを使用して、ファイル記述子を別のプロセスに渡すことができます。これは、デバッガーからライブラリーへ、またはその逆のいずれかで機能しますが、デバッガーがライブラリーを挿入している間にソケットのアドレスをターゲットプロセスに書き込むことができるため、おそらくデバッガーからライブラリーへのほうが簡単です。

ただし、ソケットのアドレスをターゲット プロセスに渡すと、さらにパイプを使用する代わりに、ソケット自体を使用することもできます。

于 2013-06-24T07:05:35.263 に答える