當前位置:首頁 » 編程語言 » gdb調試python

gdb調試python

發布時間: 2023-05-25 11:04:16

1. gdb 依賴的python 的哪些庫

gdb是用來調試二慶態進製程序的,不能調試python腳本。 python自帶pdb模塊,可以用來調試自己的腳本。 使用python -m pdb ,交互方慧鎮式,命令譽碧源與gdb類似。

2. qt是什麼意思啊

QT如下:

Qt是一個跨平台的C++應用程序開發框架。廣泛用於開發GUI程序,這種情況下又被稱為部件工具箱。也可用於開發非GUI程序,比如控制台工具和伺服器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,易於擴展,允許組件編程

QT:

2014年4月,跨平台集成開發環境Qt Creator3.1.0正式發布,實現了對於iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python介面的GDB調試支持,集成了基於Clang的C/C++代碼模塊。

基本上,Qt 同X Window上的Motif,Openwin,GTK等圖形界面庫和 Windows 平台上的 MFC,OWL,VCL,ATL 是同類型的東西。

以上內容參考網路-qt

3. 如何編譯可以在Windows下運行的帶有Python支持的ARM linux GDB

做這件事情的目的是為了在QtCreator里調試ARM Linux程序的時候,能看清楚QString、QList這些Qt特有的對象的內容,而不是一個完全看不懂的結構體。
目前(2014年8月)Linaro、CodeSourcery的GCC工具鏈里的GDB都不支持Python。想知道你用的GDB支持不支持,試一試就行,這樣表示不支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Python scripting is not supported in this of GDB.
這樣表示支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Hello GDB!
這件事情乍一看也很簡單,只要把GDB源碼下載下來,然後再配置,打開Python支持就行了。實際上會遇到的問題是,在MinGW下,又要與「\」和「:」這兩個Windows路徑里的刺頭斗爭了。我覺得我之前挺傻,編譯MinGW下Qt的時候,就去硬磕源碼和configure腳本去了。這次GDB的configure是自動生成的,不是給人看的,configure.ac看起來也很費勁,根本磕不下去,於是我換了個思路,在ubuntu下交叉編譯吧,sudo apt-get install mingw32,這是Ubuntu下的MinGW交叉編譯器。
然後是依賴,這樣的GDB要依賴expat和python的開發版本。如果是ubuntu底下直接編譯,apt-cache search一下他們的開發版本,然後sudo apt-get install一下就好了;給MinGW交叉編譯就麻煩了。先說expat,這個好辦,把http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz下載下來,然後:
./configure --prefix=[安裝目錄,如/home/c/mingw-gdb/expat] --host=i586-mingw32msvc
make
make install
會提示一些警告,無視即可。
Python就無語了,目前的GDB貌似最高支持Python 2.7,而2.7版本的Python本身不支持MinGW…… 好在有高手做了Patch,也寫了說明,可以參考這文章:http://mdqinc.com/blog/2011/10/cross-compiling-python-for-windows-with-mingw32/
但是,就算這樣,編譯也充滿挑戰,要修復很多問題,出來的Python還少「nt」模塊。就在我覺得沒辦法的時候,突然發現Windows版Qt提供的MinGW居然內置了Python開發包,位置在Tools/mingw48_32/opt,趕緊把它拷貝到Linux下,比如/home/c/mingw-gdb/python。當然,你也必須確保ubuntu下有可用的python。
然後,給GDB打一個補丁:
--- gdb-7.8/gdb/configure 2014-07-29 20:37:42.000000000 +0800
+++ gdb-7.8-old/gdb/configure 2014-08-30 00:08:27.122042706 +0800
@@ -8263,21 +8263,22 @@
# We have a python program to use, but it may be too old.
# Don't flag an error for --with-python=auto (the default).
have_python_config=yes
- python_includes=`${python_prog} ${srcdir}/python/python-config.py --includes`
+ python_config_tool=`echo ${python_prog} | sed "s#python.exe#python-config#g"`
+ python_includes=`${python_config_tool} --includes`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --includes" "$LINENO" 5
fi
fi
- python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags`
+ python_libs=`${python_config_tool} --ldflags`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --ldflags" "$LINENO" 5
fi
fi
- python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix`
+ python_prefix=`${python_config_tool} --exec-prefix`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
@@ -8343,12 +8344,12 @@
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+#if ac_fn_c_try_link "$LINENO"; then :
have_libpython=${version}
found_usable_python=yes
PYTHON_CPPFLAGS=$new_CPPFLAGS
PYTHON_LIBS=$new_LIBS
-fi
+#fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
這個補丁的目的是強制為檢測到python。
然後給拷貝到Linux下的python開發包打一個補丁:
--- python-old/bin/python-config 2013-04-18 02:43:01.000000000 +0800
+++ python/bin/python-config 2014-08-30 00:53:16.630060288 +0800
@@ -1,4 +1,4 @@
-#!/temp/x32-480-posix-dwarf-r2/mingw32/opt/bin/python2.7.exe
+#!/usr/bin/python

import sys
import os
@@ -31,26 +31,23 @@

for opt in opt_flags:
if opt == '--prefix':
- print sysconfig.PREFIX
+ print '../python'

elif opt == '--exec-prefix':
- print sysconfig.EXEC_PREFIX
+ print '../python'

elif opt in ('--includes', '--cflags'):
- flags = ['-I' + sysconfig.get_python_inc(),
- '-I' + sysconfig.get_python_inc(plat_specific=True)]
+ flags = ['-I' + os.path.split(os.path.realpath(__file__))[0] + '/../include/python2.7']
if opt == '--cflags':
- flags.extend(getvar('CFLAGS').split())
+ flags += ['-fno-strict-aliasing -DMS_WIN32 -DMS_WINDOWS -DHAVE_USABLE_WCHAR_T -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes']
print ' '.join(flags)

elif opt in ('--libs', '--ldflags'):
- libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
- libs.append('-lpython'+pyver)
+ libs = ['-lm -lpython2.7 -Wl,--out-implib=libpython2.7.dll.a']
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == '--ldflags':
if not getvar('Py_ENABLE_SHARED'):
- libs.insert(0, '-L' + getvar('LIBPL'))
- libs.extend(getvar('LINKFORSHARED').split())
+ libs.insert(0, '-L' + os.path.split(os.path.realpath(__file__))[0] + '/../lib/python2.7/config')
print ' '.join(libs)

因為Linux下是無法運行開發包中的python.exe的,所以這個補丁借用了ubuntu的python。裡面的cflags和ldflags都是在Windows底下運行原始python-config獲得的。prefix和exec-prefix設成「../python」,可以在編譯完以後,把python開發包拷貝到gdb安裝目錄裡面的python子目錄,這樣運行GDB的時候就不需要設定PYTHONHOME環境變數了。
最後一個事情,確保你的Linux下有arm交叉編譯器,我的是arm-linux-gnueabihf,是啥target就寫啥。
准備工作做完了,開始配置和編譯:
./configure --with-expat --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=[expat安裝位置] --with-python=[python開發包安裝位置/bin/python.exe]
make
make DESTDIR=[GDB安裝位置] install
然後把GDB安裝位置下面的所有文件拷貝到Windows下,再把python開發包拷貝到同目錄下的python子目錄,大功告成。
如果提示沒找到libpython2.7.dll,那就把GDB安裝目錄的python/bin下的拷貝到bin下。
如果發現生成的exe文件太大了,那就strip一下。
2015年9月12日追加:
在windows下調試時,一般會提示說載入不了共享庫,讓你用"set sysroot"或"set solib-search-path"之類設定路徑的。這個問題可以通過.gdbinit文件,用上面這兩條命令來設定路徑解決,如果想一勞永逸,可以在編譯的時候加上host_configargs環境變數來解決這個問題:
host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm ./configure ...
或者
export host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm
./configure ...

後面的路徑是你放在windows下的sysroot的位置。

4. QT是什麼意思

Qt是一個1991年由Qt Company開發的跨平台C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制台工具和伺服器。

Qt是面向對象的框架,使用特殊的代碼生成擴展以及一些宏,Qt很容易擴展,並且允許真正地組件編程。

(4)gdb調試python擴展閱讀:

在發布 Qt 4.6 的同時,作為 Qt 開發跨平台 IDE 的Qt Creator也發布了更新版本。Qt Creator 1.3 和 Qt 4.6共同構成的 Qt SDK,包含了開發跨平台應用程序所需的全部功能。

Qt Creator是一個用於Qt開發的輕量級跨平台集成開發環境。Qt Creator可帶來兩大關鍵益處:提供首個專為支持跨平台開發而設計的集成開發環境。

並確保首次接觸Qt框架的開發人員能迅速上手和操作。即使不開發Qt應用程序,Qt Creator也是一個簡單易用且功能強大的IDE。

5. .gdb是什麼格式用啥軟體可以打開

.gdb格式的文件是GPS定位儀器所採集是定位數據通過儀器自動保存的文件,可利用MapSourse及GoogleEarth等軟體打開此文件核拿,顯示的是定位數據。

變化:

1、GDB可以理解線程的名字。

2、這個命令」線程名稱」(指定一個名稱)和「線程找到[REGEXP]」(匹配名稱、目標ID,或者額外的信息)被添加。

3、Python腳本支持大大增強。

4、在c++的支持,異常處理是提高,模板參數放在范圍在一個實例化時調試。

5、線程調試的核心轉儲在GNU / Linux成為可能。

(5)gdb調試python擴展閱讀:

執行程序:

要想運行准備調試的程序,可使用run命令,在它後面可以跟隨發給該程序的任何參數,包括標准輸入和標准輸出說明符(<;和>;)和shell通配符(*、?、[、])在內。

如果使用不帶參數的run命令,gdb就再次使用你給予前一條run命令的參數,這是很有用的。利用set args 命令就可以修改發送給程序的參數,而使用show args 命令就可以查看其預設參數的列表。

(gdb) file a.out //載入被調試的可執行程序文件。

(gdb)set args _b _x

(gdb) show args

(gdb)r //執判薯行程序

backtrace命令為堆棧提供向後跟蹤功能。Backtrace 命令產生一張列表,包含著從最近的過程開始的所有有效過程和調改沖搭用這些過程的參數。

6. Python中如何用運行代碼來修改代碼

1.有SublimeREPL應該就可以調試了,輸入沒問題,調試的老衫枯時候記得選
tools->SublimeREPL->python->run current file 或者 pdb current
file (pdb 是調試工具,類似gdb)
不要侍洞用預設的build 或者 ctrl-b

2.運行調試前別忘了保存,要不不會運行修塌手改後的文件

7. ithoughts如何取消完成

ithoughts取虧慶消完成的操銷坦握作是打開ithoughts軟體,然後點開設置,找到相關信侍選項點擊取消完成即可。

8. 如何調試Python的segmentation fault錯誤

錯誤
一般都是非法內存操作,例如數組越界,例如申請a[5],卻訪問到a[5]或者a[6],這也會有很多情況,可能是循環操作時循環變數控制有問題,可能是字元串拷貝時長度發生溢出

指針指向了非法內存,例如申明一個指針,但是沒有對指針進行初始化,直接就引用,或者引用裡面的元素或者函數,或者沒有分配內存就進行釋放等,另外,申請內存還要檢查是否申請成功,如果沒有申請成功也會出現這種情況
單步調試或者加列印信息,細心一點總可以找到錯誤的,注意編譯成調試版本 如果是linux,可以產生core文件,從core文件查看出錯的地方

9. 如何在gdb調試中列印出整個鏈表的節點

如何在gdb調試中列印出整個鏈表的節點

重新編譯gdb,讓gdb支持python插件
然後去下載python-gdb插件,配置.gdbint,就可以列印標准庫容器了

10. python如何一步步調試

裝個Pycharm

1 添加斷點

2 Debug下運行代碼:

3 F8:進行下一步操作

F7 :跳入下一個方法中

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:613
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372