3

特定のアプリケーションを計測してトレース ファイルを生成し、後でトレース ファイルからシーケンス図を生成する必要があるという課題が与えられました。アプリケーションは python で記述されています。アプリケーションは、メソッドが開始および終了する場所にインストルメント化されています。

私の主な目的は、トレース ファイル内の反復パターンを見つけることです。

以下は、トレース ファイルのサンプルです。

Entering    get_instance    None    []  None    10:25:30:743000
Entering    __init__    ConfigHandler   ['config_filepath'] 56663624    10:25:30:743000
Entering    _load_config    ConfigHandler   ['path']    56663624    10:25:30:744000
Exited  _load_config    ConfigHandler   True    56663624    10:25:30:746000
Exited  __init__    ConfigHandler   None    56663624    10:25:30:747000
Exited  get_instance    None    <commons.ConfigHandler.ConfigHandler object at 0x0000000003609E48>  None    10:25:30:747000
Entering    __init__    ColumnConverter []  56963312    10:25:30:769000
Exited  __init__    ColumnConverter None    56963312    10:25:30:769000
Entering    __init__    PredicatesFactory   []  56963424    10:25:30:769000
Exited  __init__    PredicatesFactory   None    56963424    10:25:30:769000
Entering    __init__    LogFileConverter    []  56963536    10:25:30:769000
Exited  __init__    LogFileConverter    None    56963536    10:25:30:769000

トレース ファイルで繰り返しのパターンを見つける方法

私の主な目的は、トレース ファイル内の反復パターンを見つけることです。

4

3 に答える 3

0

最初の 2 つのフィールドで繰り返しを見つけたい場合は、それらを辞書のキーとして使用し、一致するすべての行のリストを入力できます。ファイル全体を処理すると、複数の要素のリストを含む辞書エントリは繰り返しになります。

#!/usr/bin/env python

import fileinput

def read (line, d=dict()):
    tokens = line.split()
    key = ' '.join(tokens[0:2])
    try:
        d[key].append(line)
    except KeyError:
        d[key] = [line]in v:
    return d

def main ():
    d = dict()
    for line in fileinput.input():
        read(line, d)
    for k  in d:
        v = d[k]
        if len(v) > 1:
            # print "### %s => %s" % (k, v)   for debugging
            for l in v:
                print l,

if __name__ == '__main__':
    main()

出力例 (デバッグ出力が有効になっているため、これらの出力が出力される理由がわかります):

### Exited __init__ => ['Exited  __init__    ConfigHandler   None    56663624    10:25:30:747000\n', 'Exited  __init__    ColumnConverter None    56963312    10:25:30:769000\n', 'Exited  __init__    PredicatesFactory   None    56963424    10:25:30:769000\n', 'Exited  __init__    LogFileConverter    None    56963536    10:25:30:769000\n']
Exited  __init__    ConfigHandler   None    56663624    10:25:30:747000
Exited  __init__    ColumnConverter None    56963312    10:25:30:769000
Exited  __init__    PredicatesFactory   None    56963424    10:25:30:769000
Exited  __init__    LogFileConverter    None    56963536    10:25:30:769000
### Entering __init__ => ["Entering    __init__    ConfigHandler   ['config_filepath'] 56663624    10:25:30:743000\n", 'Entering    __init__    ColumnConverter []  56963312    10:25:30:769000\n', 'Entering    __init__    PredicatesFactory   []  56963424    10:25:30:769000\n', 'Entering    __init__    LogFileConverter    []  56963536    10:25:30:769000\n']
Entering    __init__    ConfigHandler   ['config_filepath'] 56663624    10:25:30:743000
Entering    __init__    ColumnConverter []  56963312    10:25:30:769000
Entering    __init__    PredicatesFactory   []  56963424    10:25:30:769000
Entering    __init__    LogFileConverter    []  56963536    10:25:30:769000
于 2013-04-15T15:49:46.000 に答える