0

私はPythonアプリケーションをリバースエンジニアリングしています。これにより、アプリケーション内でコードを動的にインストルメント化することにより、動作を観察します。問題は、正しいレベルのインデントでコードを挿入する必要があることです。

たとえば、私がインストルメント化するコードのフラグメントを考えてみましょう。

class A:
     def move(self,name):
         name=self.name
         print name
     def move1(self):
         print 'dude'

上記のサンプルコードでは、エントリと終了のログを計測します。計測されたコードは次のようになります。

enter code class A:
     def move(self,name):
         print 'Entry move class='A''
         name=self.name
         print name
         Print'Exit move class='A''
     def move1(self):
         print 'Entry move1 class='A''
         print 'dude'
         print 'Exit move class='A''

これは、代わりにコードをインストルメントするときに必要なもので、次のようになります。

enter code class A:
     def move(self,name):
print 'Entry move class='A''
             name=self.name
             print name
print'Exit move class='A''
         def move1(self):
print 'Entry move1 class='A''
             print 'dude'
print'Exit move1 class='A''

私はスクリプトを書いているので、それは次の行に挿入され、Pythonコードのインデント形式を知りません。

とにかく、挿入中にインデントを自動的に調整できるか、次の行の文字のインデックスを知って、文字列にスペースを挿入してから挿入する必要がありますか?

4

1 に答える 1

1

あなたの例では、実際にはかなり簡単です:

  • 「エントリ」メッセージには、それに続くステートメントとまったく同じインデントが必要です。

  • 「終了」メッセージには、対応する「開始」メッセージとまったく同じインデントが必要です。

printとはいえ、2 つの明示的なステートメントの代わりにデコレータを使用することで、作業を大幅に簡素化できます。このページのようなもの@traceは、 のペアよりもコードに挿入するのがはるかに簡単です。prints

さらに、ソース ファイルを変更する代わりに、オンザフライでインストルメンテーションを実行できます。

于 2013-03-07T10:13:15.007 に答える