包含使用gdb查看python的詞條

  • 1、GDB如何查找指針我要在GDB里導入Python腳
  • 2、如何使用linux下gdb來調試python程序
  • 3、如何使用gdb調試python服務

(1)假設要debug的進程號為1000,運行如下命令:

$ gdb -p 1000

使用此命令即可使gdb附加到進程。

(2)載入libpython腳本

如果你的gdb是redhat或fedora等廠商修改過的,會有–python選項,使用此選項即可指定gdb啟動時載入的Python擴展腳本(此腳本是擴展gdb的,不是我們需要debug的腳本)。

$ gdb –python /path/to/libpython .py -p 1000

如果安裝的是GNU的gdb,就需要打開gdb後手動載入libpython.py腳本

(gdb) python

import sys

sys.path.insert(0, ‘/path/to/libpython.py’ )

import libpython

end

(gdb)

這時就可以使用py-bt命令列印當前線程的Python traceback了。libpython還提供很多命令,例如py-print列印變數,py-locals列印所有本地變數等等,詳細可打開libpython.py查看。

Linux下使用pdb簡單調試python程序

python自帶調試工具庫:pdb

# -*- coding:utf-8 -*-

def func(num):

s = num * 10

return s

if __name__ == ‘__main__’:

print ‘debug starting…’

print ‘*’ * 10

print ‘debug ending…’

num = 100

s = func(num)

print s

在python文件中不引用pdb庫,可以在執行python文件的時候,加上參數:

python -m pdb demo.py

來到pdb調試交互界面,debug模式將會停止在的第一行程序代碼行

可以執行如下命令,進行相應的操作:

b(or break):設置斷點;設置函數:b demo.func;設置行數:b demo:14(行數)

n(or next):執行下一行:

Step over,跳過

c(or continue):執行下一個斷點,沒有斷點則到程序結束:Step filter

s(or step):進入函數,

Step into,單步跳入

r(or return):跳出函數,Step return

l(or list):查看當前代碼段

q(or quit):退出當前debug

p(or print):列印變數值

h(or help):查看幫助

cl(clear):清除所有節點

disable [bpnumber[bpnumber]]:將第num個斷點失效,enable,失效第10個斷點

enable [bpnumber[bpnumber]]:啟用第num個斷點,enable 10,啟用第10個斷點

w(where):列印堆棧信息

a(args):列印當前函數參數信息

當然我們也可以使用pdb庫的函數,來實現對py的debug:

比如:我們可以使用pdb函數:set_trace()

def func(num):

s = num * 10

return s

if __name__ == ‘__main__’:

print ‘debug starting…’

print ‘*’ * 10

pdb.set_trace()

print ‘debug ending…’

num = 100

s = func(num)

print s

執行程序:python pdb_demo.py

此時意味著給程序設置斷點行,將會自動運行至print 『py ending…』停住,讓開發者繼續觸發接下來的操作,該操作在一個py引用其他py的時候,設置斷點恰到好處。

1.安裝gdb 最好是gdb7.7版本

2.獲取python源代碼

3.編譯python

* ./configure –prefix=/home/admin/python

* make “CFLAGS=-g -fno-inline -fno-strict-aliasing”

* make install

4.複製python源代碼中的Tools//gdb/libpython.py到目錄 ~/.gdbinit

5.修改.gdbinit中的代碼

if $pc PyEval_EvalFrameEx $pc PyEval_EvalCodeEx

修改為

if $pc PyEval_EvalFrameEx $pc PyEval_EvalCodeEx $fp != 0

6.啟動gdb ./gdb python

可用命令有 ./gdb python –pid=${pid}

./gdb python –core=${core_file}

7.引入libpython.py

(gdb) python

import sys

sys.path.insert(0,’/home/admin/’)

import libpython

end

(gdb)

8.然後可運行命令py-bt,py-list,pystack,pystackv

註:

1.libpython.py為python debug擴展

2.gdbinit中包含擴展命令,pystack即在這裡邊定義

3.若運行pystack時出現錯誤 No symbol “co” in current context.

則表示未執行以下兩個步驟:

make “CFLAGS=-g -fno-inline -fno-strict-aliasing”

修改.gdbinit中的代碼(修改內容見上邊的步驟5)

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126165.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:06
下一篇 2024-10-03 23:06

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論