自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python腳本在使用gdb調(diào)試時(shí)常會(huì)遇到的三個(gè)“克星”

開發(fā) 后端
熟話說(shuō)不怕一萬(wàn),就怕萬(wàn)一,在使用gdb調(diào)試Python腳本的實(shí)際操作步驟中,有幾種情況是我們很難解決的。例如段錯(cuò)誤,在運(yùn)行中的daemon的相關(guān)程序,等

使用gdb調(diào)試Python腳本

我們?cè)趯?shí)際調(diào)試python腳本中一般可以用記錄log和python本身自帶的pdb,當(dāng)然這是在一般的情況下,以下的文章就會(huì)提出一些運(yùn)用log和python本身自帶的pdb卻不能解決的相關(guān)情況的相關(guān)介紹。 但凡事總有例外,在以下三種情況時(shí)上述方法就無(wú)能為力了。
1 段錯(cuò)誤

2 運(yùn)行中的daemon程序

3 core dump

這個(gè)時(shí)候就需祭出gdb進(jìn)行調(diào)試。python2.6的源碼中提供了部分預(yù)定義函數(shù)以便大家使用gdb調(diào)試,我們只需將文件Python-2.6/Misc/gdbinit所包括的內(nèi)容加入到用戶目錄下的.gdbinit文件中即可,這樣每次啟動(dòng)gdb時(shí)會(huì)自動(dòng)完成這些宏的定義。但可惜的是Python2.6.2 gdbini對(duì)于pylocals的定義居然有錯(cuò)誤, 看來(lái)是沒有隨著代碼的更新而同步更新。

我們只需將

  1. while $_i < f->f_nlocals 

修改為

  1. while $_i < f->f_code->co_nlocals 

即可。文章后面所附的幾個(gè)宏建議也加入的.gdbinit文件中,更多的宏可參考我們首先需要構(gòu)造一個(gè)會(huì)造成段錯(cuò)誤的python腳本。老實(shí)說(shuō)讓python發(fā)生段錯(cuò)誤并不容易,但通過(guò)其外部調(diào)用庫(kù)就很簡(jiǎn)單了。我們將該文件命名為gdb_test.py

  1. import sys, os, libxml2  
  2. def segv_test():  
  3. s = "<html><body><div><a><a></a></a><a></a></div></body></html>" 
  4. options = libxml2.HTML_PARSE_RECOVER + \  
  5. libxml2.HTML_PARSE_NOERROR + \  
  6. libxml2.HTML_PARSE_NOWARNING  
  7. doc = libxml2.htmlReadDoc(s, None, 'utf-8', options).doc  
  8. ctxt = doc.xpathNewContext()  
  9. nodes = ctxt.xpathEval('//body/node()')  
  10. nodes.reverse()  
  11. for note in nodes:  
  12. nexts = note.xpathEval('node()')  
  13. note.unlinkNode()   
  14. note.freeNode()  

 freeNode會(huì)將該節(jié)點(diǎn)及其子節(jié)點(diǎn)釋放掉

  1. nexts[0].unlinkNode()   
  2. nexts[0].freeNode()  

資源已經(jīng)釋放,再次釋放會(huì)造成段錯(cuò)誤

 

  1. def main():  
  2. segv_test()  
  3. if __name__ == "__main__":  
  4. main()  

 

使用gdb運(yùn)行該腳本,我們會(huì)得到段錯(cuò)誤信息。

  1. gdb python  
  2. r gdb_test.py  
  3. *** glibc detected *** double free or corruption 
    (fasttop): 0x08104570 ***  
  4. Program received signal SIGABRT, Aborted.  
  5. [Switching to Thread -1208260928 (LWP 26159)]  
  6. 0x00b987a2 in _dl_sysinfo_int80 () from /
    lib/ld-linux.so.2  
     

 

 以上就是對(duì)使用gdb調(diào)試Python腳本相關(guān)的內(nèi)容的介紹,望你會(huì)有所收獲。

【編輯推薦】

  1. Python編寫shell腳本中常用的文件介紹
  2. 用Python編寫shell腳本時(shí)經(jīng)常使用的函數(shù)的介紹
  3. 用Python腳本轉(zhuǎn)換成windows的可執(zhí)行程序簡(jiǎn)介
  4. Python入門用Bug修改和.jam文件需要注意的問(wèn)題
  5. 搭建Python Web環(huán)境所需要的相關(guān)步驟介紹
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2020-07-27 13:49:47

Python編程語(yǔ)言開發(fā)

2019-10-09 17:12:16

PythonLinuxWindows

2017-02-06 18:42:37

Linuxgdb程序

2021-03-15 06:23:40

GDB調(diào)試代碼編程語(yǔ)言

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2022-10-13 15:31:32

Python軟件工程編碼

2024-09-05 13:02:41

2012-05-27 18:24:12

蘋果

2018-03-13 12:31:21

2021-07-28 08:53:53

GoGDB調(diào)試

2022-12-19 10:10:07

GDB命令

2021-10-13 06:59:03

Python技巧編程

2012-11-19 10:32:07

路由器ConsoleIP地址

2022-06-30 09:01:00

嵌入式軟件技巧

2023-04-26 11:14:11

IT領(lǐng)導(dǎo)者遠(yuǎn)程工作

2024-01-09 15:37:46

2009-08-06 11:00:19

C#對(duì)象的使用

2020-06-11 09:00:27

SDN網(wǎng)絡(luò)架構(gòu)網(wǎng)絡(luò)

2017-12-25 13:58:23

匿名函數(shù)普通函數(shù)代碼

2019-04-30 09:40:41

Windows 10技巧Windows
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)