Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c2748bf

Browse files
committed
Python: CG trace: reconstruct call expr from bytecode
So we can differentiate multiple calls in one line.
1 parent d46b410 commit c2748bf

9 files changed

Lines changed: 445 additions & 69 deletions

File tree

Lines changed: 103 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,105 @@
11
<root>
2-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py" call_linenum="1" call_inst_index="4" externalcallee_module="builtins" externalcallee_qualname="print" externalcallee_is_builtin="True"/>
3-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py" call_linenum="2" call_inst_index="12" externalcallee_module="builtins" externalcallee_qualname="len" externalcallee_is_builtin="True"/>
4-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py" call_linenum="4" call_inst_index="28" externalcallee_module="None" externalcallee_qualname="list.append" externalcallee_is_builtin="True"/>
5-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py" call_linenum="7" call_inst_index="44" externalcallee_module="sys" externalcallee_qualname="getdefaultencoding" externalcallee_is_builtin="True"/>
2+
<info>
3+
<cg_trace_version>0.0.2</cg_trace_version>
4+
<args>--xml example-traces/builtins.xml example/builtins.py</args>
5+
<exit_status>completed</exit_status>
6+
<elapsed>0.00 seconds</elapsed>
7+
<utctimestamp>2020-07-20T09:27:00</utctimestamp>
8+
</info>
9+
<recorded_calls>
10+
<recorded_call>
11+
<Call>
12+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py</filename>
13+
<linenum>1</linenum>
14+
<inst_index>4</inst_index>
15+
<bytecode_expr>
16+
<BytecodeCall>
17+
<function>
18+
<BytecodeVariableName>
19+
<name>print</name>
20+
</BytecodeVariableName>
21+
</function>
22+
</BytecodeCall>
23+
</bytecode_expr>
24+
</Call>
25+
<ExternalCallee>
26+
<module>builtins</module>
27+
<qualname>print</qualname>
28+
<is_builtin>True</is_builtin>
29+
</ExternalCallee>
30+
</recorded_call>
31+
<recorded_call>
32+
<Call>
33+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py</filename>
34+
<linenum>2</linenum>
35+
<inst_index>12</inst_index>
36+
<bytecode_expr>
37+
<BytecodeCall>
38+
<function>
39+
<BytecodeVariableName>
40+
<name>len</name>
41+
</BytecodeVariableName>
42+
</function>
43+
</BytecodeCall>
44+
</bytecode_expr>
45+
</Call>
46+
<ExternalCallee>
47+
<module>builtins</module>
48+
<qualname>len</qualname>
49+
<is_builtin>True</is_builtin>
50+
</ExternalCallee>
51+
</recorded_call>
52+
<recorded_call>
53+
<Call>
54+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py</filename>
55+
<linenum>4</linenum>
56+
<inst_index>28</inst_index>
57+
<bytecode_expr>
58+
<BytecodeCall>
59+
<function>
60+
<BytecodeAttribute>
61+
<attr_name>append</attr_name>
62+
<object>
63+
<BytecodeVariableName>
64+
<name>l</name>
65+
</BytecodeVariableName>
66+
</object>
67+
</BytecodeAttribute>
68+
</function>
69+
</BytecodeCall>
70+
</bytecode_expr>
71+
</Call>
72+
<ExternalCallee>
73+
<module>None</module>
74+
<qualname>list.append</qualname>
75+
<is_builtin>True</is_builtin>
76+
</ExternalCallee>
77+
</recorded_call>
78+
<recorded_call>
79+
<Call>
80+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/builtins.py</filename>
81+
<linenum>7</linenum>
82+
<inst_index>44</inst_index>
83+
<bytecode_expr>
84+
<BytecodeCall>
85+
<function>
86+
<BytecodeAttribute>
87+
<attr_name>getdefaultencoding</attr_name>
88+
<object>
89+
<BytecodeVariableName>
90+
<name>sys</name>
91+
</BytecodeVariableName>
92+
</object>
93+
</BytecodeAttribute>
94+
</function>
95+
</BytecodeCall>
96+
</bytecode_expr>
97+
</Call>
98+
<ExternalCallee>
99+
<module>sys</module>
100+
<qualname>getdefaultencoding</qualname>
101+
<is_builtin>True</is_builtin>
102+
</ExternalCallee>
103+
</recorded_call>
104+
</recorded_calls>
6105
</root>
Lines changed: 135 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,137 @@
11
<root>
2-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="2" call_inst_index="4" externalcallee_module="builtins" externalcallee_qualname="print" externalcallee_is_builtin="True"/>
3-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="5" call_inst_index="4" externalcallee_module="builtins" externalcallee_qualname="print" externalcallee_is_builtin="True"/>
4-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="7" call_inst_index="18" pythoncallee_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" pythoncallee_linenum="1" pythoncallee_funcname="foo"/>
5-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="8" call_inst_index="24" pythoncallee_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" pythoncallee_linenum="4" pythoncallee_funcname="bar"/>
6-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="10" call_inst_index="30" pythoncallee_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" pythoncallee_linenum="1" pythoncallee_funcname="foo"/>
7-
<recorded_call call_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" call_linenum="10" call_inst_index="36" pythoncallee_filename="/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py" pythoncallee_linenum="4" pythoncallee_funcname="bar"/>
2+
<info>
3+
<cg_trace_version>0.0.2</cg_trace_version>
4+
<args>--xml example-traces/simple.xml example/simple.py</args>
5+
<exit_status>completed</exit_status>
6+
<elapsed>0.00 seconds</elapsed>
7+
<utctimestamp>2020-07-20T09:27:01</utctimestamp>
8+
</info>
9+
<recorded_calls>
10+
<recorded_call>
11+
<Call>
12+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
13+
<linenum>2</linenum>
14+
<inst_index>4</inst_index>
15+
<bytecode_expr>
16+
<BytecodeCall>
17+
<function>
18+
<BytecodeVariableName>
19+
<name>print</name>
20+
</BytecodeVariableName>
21+
</function>
22+
</BytecodeCall>
23+
</bytecode_expr>
24+
</Call>
25+
<ExternalCallee>
26+
<module>builtins</module>
27+
<qualname>print</qualname>
28+
<is_builtin>True</is_builtin>
29+
</ExternalCallee>
30+
</recorded_call>
31+
<recorded_call>
32+
<Call>
33+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
34+
<linenum>5</linenum>
35+
<inst_index>4</inst_index>
36+
<bytecode_expr>
37+
<BytecodeCall>
38+
<function>
39+
<BytecodeVariableName>
40+
<name>print</name>
41+
</BytecodeVariableName>
42+
</function>
43+
</BytecodeCall>
44+
</bytecode_expr>
45+
</Call>
46+
<ExternalCallee>
47+
<module>builtins</module>
48+
<qualname>print</qualname>
49+
<is_builtin>True</is_builtin>
50+
</ExternalCallee>
51+
</recorded_call>
52+
<recorded_call>
53+
<Call>
54+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
55+
<linenum>7</linenum>
56+
<inst_index>18</inst_index>
57+
<bytecode_expr>
58+
<BytecodeCall>
59+
<function>
60+
<BytecodeVariableName>
61+
<name>foo</name>
62+
</BytecodeVariableName>
63+
</function>
64+
</BytecodeCall>
65+
</bytecode_expr>
66+
</Call>
67+
<PythonCallee>
68+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
69+
<linenum>1</linenum>
70+
<funcname>foo</funcname>
71+
</PythonCallee>
72+
</recorded_call>
73+
<recorded_call>
74+
<Call>
75+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
76+
<linenum>8</linenum>
77+
<inst_index>24</inst_index>
78+
<bytecode_expr>
79+
<BytecodeCall>
80+
<function>
81+
<BytecodeVariableName>
82+
<name>bar</name>
83+
</BytecodeVariableName>
84+
</function>
85+
</BytecodeCall>
86+
</bytecode_expr>
87+
</Call>
88+
<PythonCallee>
89+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
90+
<linenum>4</linenum>
91+
<funcname>bar</funcname>
92+
</PythonCallee>
93+
</recorded_call>
94+
<recorded_call>
95+
<Call>
96+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
97+
<linenum>10</linenum>
98+
<inst_index>30</inst_index>
99+
<bytecode_expr>
100+
<BytecodeCall>
101+
<function>
102+
<BytecodeVariableName>
103+
<name>foo</name>
104+
</BytecodeVariableName>
105+
</function>
106+
</BytecodeCall>
107+
</bytecode_expr>
108+
</Call>
109+
<PythonCallee>
110+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
111+
<linenum>1</linenum>
112+
<funcname>foo</funcname>
113+
</PythonCallee>
114+
</recorded_call>
115+
<recorded_call>
116+
<Call>
117+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
118+
<linenum>10</linenum>
119+
<inst_index>36</inst_index>
120+
<bytecode_expr>
121+
<BytecodeCall>
122+
<function>
123+
<BytecodeVariableName>
124+
<name>bar</name>
125+
</BytecodeVariableName>
126+
</function>
127+
</BytecodeCall>
128+
</bytecode_expr>
129+
</Call>
130+
<PythonCallee>
131+
<filename>/home/rasmus/code/ql/python/tools/recorded-call-graph-metrics/example/simple.py</filename>
132+
<linenum>4</linenum>
133+
<funcname>bar</funcname>
134+
</PythonCallee>
135+
</recorded_call>
136+
</recorded_calls>
8137
</root>

python/tools/recorded-call-graph-metrics/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name="cg_trace",
7-
version="0.0.1",
7+
version="0.0.2", # Remember to update src/cg_trace/__init__.py
88
description="Call graph tracing",
99
packages=find_packages("src"),
1010
package_dir={"": "src"},

python/tools/recorded-call-graph-metrics/src/cg_trace/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sys
22

3-
__version__ = "0.0.1"
3+
__version__ = "0.0.2" # remember to update setup.py
44

55
# Since the virtual machine opcodes changed in 3.6, not going to attempt to support
66
# anything before that. Using dataclasses, which is a new feature in Python 3.7

0 commit comments

Comments
 (0)