Python腳本的內部各函數之間的調用關系
通過堆棧我們可以很清楚的看到關于Python腳本的內部各函數之間的調用關系, 那么以下的文章主要是介紹我們怎么查看相關函數的內變量情況,希望你在看完這篇文章會有所收獲。
正如大家所, python內部堆棧和函數的調用由PyEval_EvalFrameEx完成的, 一次PyEval_EvalFrameEx意味著一次函數調用,象上面的第19,13,10行分別對應于main, segv_test, freeNode函數, 將gdb定位到對應行后,使用pylocals宏即可查看該函數內部變量的詳細情況。
- (gdb) up 13
- #13 0x007d6d2b in PyEval_EvalFrameEx
(f=0x81242fc, throwflag=0) at Python/ceval.c:2370- 2370 in Python/ceval.c
- (gdb) pylocals
- s:
- object :
'<html><body><div><a><a></a></a><a></a></div></body></html>'- type : str
- refcount: 3
- address : 0xb7f64440
- options:
- object : 97
- type : int
- refcount: 7
- address : 0x8082c20
- doc:
- object : <xmlDoc (None) object at 0xb7cc04ec>
- type : instance
- refcount: 1
- address : 0xb7cc04ec
- ctxt:
- object : <libxml2.xpathContext instance at 0xb7f70ccc>
- type : instance
- refcount: 1
- address : 0xb7f70ccc
- nodes:
- object : [<xmlNode ((儓X? object at 0xb7cc0cac>]
- type : list
- refcount: 2
- address : 0xb7f70a8c
- note:
- object : <xmlNode ((?圶? object at 0xb7cc0cac>
- type : instance
- refcount: 2
- address : 0xb7cc0cac
- nexts:
- object : [<xmlNode (hhX? object at 0xb7cc750c>,
<xmlNode (HXX? object at 0xb7cc76cc>,
<xmlNode (@XX? object at 0xb7c9348c>]- type : list
- refcount: 1
- address : 0xb7f4ce4c
Python腳本調試時斷點的設置是個很麻煩的東西,我所能想到的有兩種方法:
1 根據函數的python源碼進行斷點設置;
2 采用sleep函數和ctrl+c來中斷程序的運行。
無論怎么樣使用逐條執行進行調試都是很痛苦的事情,因為這個時候python解釋器本身要做很多工作。 由于本身對于python源碼不是很熟悉,因此對如何使用gdb對python腳本調試上也只是很粗略的理解, 這里權當拋磚引玉, 歡迎達人們給出分享的經驗。以上就是對Python腳本內部各函數的調用關系, 以及如何查看函數內變量情況相關的內容的介紹,望你會有所收獲。
【編輯推薦】