Debug và trace trong python
Em thử trace bằng lệnh sau: python -m trace --listfuncs --trackcalls main.py
Khi thử trace đoạn code sau:
file testdebug:
from testdebug1 import *
hello()
file testdebug1:
from testdebug2 import *
def hello():
print “hello”
hello1()
file testdebug2:
def hello1():
print “hello1”
Bằng lệnh: python -m trace --listfuncs --trackcalls testdebug thì nó ra kết quả:
hello
hello1
calling relationships:
*** /usr/lib/python2.7/trace.py ***
trace.Trace.runctx -> trace._unsettrace
–> testdebug
trace.Trace.runctx -> testdebug.
*** testdebug ***
–> testdebug1.py
testdebug. -> testdebug1.
testdebug. -> testdebug1.hello
*** testdebug1.py ***
–> testdebug2.py
testdebug1. -> testdebug2.
testdebug1.hello -> testdebug2.hello1
Từ cái này có thể suy ra dễ dàng: testdebug gọi testdebug1.hello và testdebug1.hello gọi testdebug2.hello1.
Nhưng vấn đề của em là ở chỗ khi em trace binwalk(1 opensource) thì khi xem module display, dòng đầu tiên như bên dưới, em không biết nó gọi từ đâu:
*** /usr/local/lib/python2.7/dist-packages/binwalk/core/display.py ***
–> /usr/lib/python2.7/csv.py
display. -> csv.
display. -> display.Display
display.Display.init -> display.Display._configure_formatting
display.Display._configure_formatting -> display.Display.format_strings
display.Display._fprint -> display.Display._format_line
display.Display.footer -> display.Display._fprint
–> /usr/local/lib/python2.7/dist-packages/binwalk/core/compat.py
display.Display.header -> compat.has_key
display.Display.header -> display.Display._fprint
display.Display.result -> display.Display._fprint
Rồi em tiếp tục kiếm thì thấy đoạn bên dưới:
*** /usr/local/lib/python2.7/dist-packages/binwalk/core/module.py ***
–> /usr/local/lib/python2.7/dist-packages/binwalk/core/display.py
module.Module.footer -> display.Display.footer
module.Module.header -> display.Display.add_custom_header
module.Module.header -> display.Display.format_strings
module.Module.header -> display.Display.header
module.Module.main -> display.Display.format_strings
module.Module.main -> module.Module._plugins_post_scan
module.Module.main -> module.Module._plugins_pre_scan
module.Module.main -> module.Module.init
module.Module.main -> module.Module.reset_dependencies
module.Module.main -> module.Module.run
Có vẻ nó được gọi từ module Module, nhưng tại sao đoạn code đâu tiên không được gọi từ file nào mà vẫn tự động chạy??? Anh chị nào biết không?
Toàn bộ file trace của em:
http://codepad.org/u8mkXYUj