成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

2 運行中的daemon程序

3 core dump

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

我們只需將

  1. while $_i < f->f_nlocals 

修改為

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

即可。文章后面所附的幾個宏建議也加入的.gdbinit文件中,更多的宏可參考我們首先需要構(gòu)造一個會造成段錯誤的python腳本。老實說讓python發(fā)生段錯誤并不容易,但通過其外部調(diào)用庫就很簡單了。我們將該文件命名為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會將該節(jié)點及其子節(jié)點釋放掉

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

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

 

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

 

使用gdb運行該腳本,我們會得到段錯誤信息。

  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  
     

 

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

【編輯推薦】

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

2025-06-26 05:00:00

2020-07-27 13:49:47

Python編程語言開發(fā)

2019-10-09 17:12:16

PythonLinuxWindows

2017-02-06 18:42:37

Linuxgdb程序

2021-03-15 06:23:40

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

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

2023-04-26 11:14:11

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

2021-10-13 06:59:03

Python技巧編程

2021-07-28 08:53:53

GoGDB調(diào)試

2022-12-19 10:10:07

GDB命令

2009-08-06 11:00:19

C#對象的使用

2022-06-30 09:01:00

嵌入式軟件技巧

2024-01-09 15:37:46

2012-11-19 10:32:07

路由器ConsoleIP地址

2020-06-11 09:00:27

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

2017-12-25 13:58:23

匿名函數(shù)普通函數(shù)代碼
點贊
收藏

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

主站蜘蛛池模板: 成年人网站免费视频 | 欧美视频在线看 | 亚洲一区二区三区在线免费 | 日韩男人天堂 | 成人av网站在线观看 | 欧美日韩精品综合 | 久久久精品网 | 玖玖国产精品视频 | 久久久久香蕉视频 | 一区二区三区免费 | 91精品一区二区 | 亚洲视频欧美视频 | 亚洲香蕉在线视频 | 精品成人佐山爱一区二区 | 一级片免费在线观看 | 久久久久国产一区二区三区四区 | 亚洲精品乱 | 日韩精品在线观看一区二区三区 | 国产精品国产精品国产专区不片 | 亚洲激情在线观看 | 亚洲女人天堂成人av在线 | 亚洲精品成人在线 | 成年人黄色一级片 | 在线免费毛片 | 国产精品一区二区无线 | 国产成人久久av免费高清密臂 | av片网站 | 成人三区| a级免费观看视频 | 中文字幕一区二区三区日韩精品 | 免费99精品国产自在在线 | 在线国产一区 | 久久国产精品偷 | 超碰免费在线 | 国产精品成人一区二区 | 蜜桃在线一区二区三区 | 日韩精品久久一区二区三区 | 国产中文视频 | 国产一区二区三区网站 | 成人福利网 | 青青草一区|