導航:首頁 > 源碼編譯 > gdbpython編譯

gdbpython編譯

發布時間:2024-07-17 23:01:00

⑴ riscv-gnu-toolchain 浜ゅ弶緙栬瘧鍣ㄥ備綍鏋勫緩錛

鎺㈢儲RISC-V鏋舵瀯鐨凣NU宸ュ叿閾炬瀯寤轟箣鏃

瑕佹瀯寤篟ISC-V鏋舵瀯鐨凣NU宸ュ叿閾撅紝浣犻渶瑕佺簿蹇冮厤緗鍜屽畨瑁呬竴緋誨垪鍏抽敭緇勪歡銆傞栧厛錛岀『淇濅綘鐨勭郴緇熷凡瀹夎呭繀瑕佺殑渚濊禆宸ュ叿錛屽寘鎷 sudo apt-get install git autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf patchutils bc libexpat-dev libglib2.0-dev ninja-build zlib1g-dev pkg-config libboost-all-dev libtool libssl-dev libpixman-1-dev libpython-dev virtualenv libmount-dev libsdl2-dev

鐒跺悗錛屽紑濮嬩笅杞絉ISC-V宸ュ叿閾劇殑鏍稿績緇勪歡錛

1. 鑾峰彇RISC-V緙栬瘧鍣ㄥ熀紜搴

浠嶨itee鍏嬮殕riscv-gnu-toolchain鐨勪富鍒嗘敮:


git clone https://gitee.com/mirrors/riscv-gnu-toolchain

鎺ョ潃錛屽垎鍒鍏嬮殕RISC-V鐨凜緙栬瘧鍣錛坮iscv-gcc錛夈佹祴璇曟嗘灦錛坮iscv-dejagnu錛夈丟NU C搴擄紙riscv-glibc錛変互鍙婅交閲忕駭宓屽叆寮忓簱錛坮iscv-newlib錛:


git clone -b riscv-gcc-10.2.0 https://gitee.com/mirrors/riscv-gcc
git clone https://gitee.com/mirrors/riscv-dejagnu
git clone -b riscv-glibc-2.29 https://gitee.com/mirrors/riscv-glibc
git clone https://gitee.com/mirrors/riscv-newlib

2. 璋冭瘯鍣ㄧ殑鍔犲叆

涓轟簡璋冭瘯錛岃繕闇涓嬭澆RISC-V鐗堟湰鐨凣DB:


git clone -b fsf-gdb-10.1-with-sim https://gitee.com/mirrors/riscv-binutils-gdb riscv-gdb

鎺ヤ笅鏉ワ紝榪涘叆鏋勫緩榪囩▼錛

- 閰嶇疆宸ュ叿閾

鍦ㄧ粓絝鍒涘緩涓涓鍚嶄負"build"鐨勭洰褰曪紝鐒跺悗鍒囨崲鍒拌ョ洰褰曪紝鎵ц屼互涓嬮厤緗鍛戒護錛


cd build
../configure --prefix=/opt/riscv/gcc --enable-multilib --target=riscv64-multlib-elf

榪欎釜閰嶇疆灝嗗伐鍏烽摼瀹夎呭埌"/opt/riscv/gcc"錛岄渶瑕佽秴綰х敤鎴鋒潈闄愶紝鎵浠ヨ風『淇濅嬌鐢╯udo銆



- 緙栬瘧涓庡畨瑁

浣跨敤澶氱嚎紼嬶紙-j8錛夊姞閫熺紪璇戣繃紼嬶細


sudo make -j8

緙栬瘧瀹屾垚鍚庯紝宸ュ叿閾懼皢鑷鍔ㄥ畨瑁呭埌鎸囧畾鐩褰曪紝鍙浠ラ氳繃楠岃瘉鐗堟湰淇℃伅鏉ョ『璁ゅ畨瑁呮槸鍚︽垚鍔燂細


cd /opt/riscv/gcc/bin
riscv64-unknown-elf-gcc -v

閫氳繃浠ヤ笂姝ラわ紝浣犲凡鎴愬姛鏋勫緩浜哛ISC-V鏋舵瀯鐨凣NU宸ュ叿閾撅紝鐜板湪浣犲彲浠ュ湪RISC-V騫沖彴涓婃剦蹇鍦拌繘琛孋璇璦緙栬瘧鍜岃皟璇曚簡銆傝繖涓宸ュ叿閾句笉浠呭寘鍚浜咰緙栬瘧鍣錛岃繕娑電洊浜嗘祴璇曟嗘灦鍜屽繀瑕佺殑搴撴敮鎸侊紝涓篟ISC-V寮鍙戣呮彁渚涗簡寮哄ぇ鐨勫紑鍙戠幆澧冦

⑵ python中有沒有像java中的jstack命令

沒有像jstack那麼方便直接用的東西,一般來說有幾個方案:

IDE: 用諸如 PyCharm, Eclpise with Pydev 的工具調試,覺得掛起的時候暫停並檢查各個調用棧。
GDB: 優點是可以調試到native extension,缺點也很明顯,需要在編譯Python的時候加上Debug Symbols,默認這個是沒有的。簡單的說就是功能強大但是配得麻煩。
pdb:適合下斷點...
pudb: 改下代碼,在程序入口import pudb; pudb.set_interrupt_handler(),在運行的時候就可以Ctrl-C進入到互動式調試環境,易用性還好吧。
擼一個singal handler用於列印所有棧信息,參考 celery 實現的 install_cry_handler,或者看看 signalhandler,這個在 Python 3.3 自帶了。

⑶ 使用gdb查看python段錯誤(Segmentation fault)

公司有個業務是使用python腳本調用.so文件,但是有時候so文件內部發生錯誤,python就直接崩潰了,無任何提示信息,所以很不方便找錯誤原因.

使用 gdb 可以看到更詳細的一些信息,其使用方式如下:

ulimit -c 是查看創建的核心轉儲的最大大小,這里為0,是需要修改的,可以將其改成不限制大小的 unlimited .
cat /proc/sys/kernel/core_pattern 這一步我的理解是查看到時候生成的緩存文件存儲名稱,這里為 core ,表示其會在當前目錄下生成一個名為core的緩存文件,但是為了使其更加通用,可以修改一下其路徑和名稱格式.

可以看到在 var/cores 目錄下生成了一個 core.python.31796 文件,此時可以在剛才的運行目錄下執行,下面的 which 前面是`符號,不是單引號

此時可以看到項目最終是在 #0 0x00007f89d8700960 in mkl_pds_lp64_ladj_mod_pardiso () from /usr/lib/libmkl_intel_thread.so 時發生了錯誤,這個時候可以輸入 bt 查看更多,其從上到下是錯誤從底層到最外層的順序.
若執行的時候沒有 gdb ,可以執行 apt-get install gdb 安裝.

還有就是,若查看的時候錯誤地方是 #0 0x00000000005406df in ?? () 這樣的沒有具體函數名的情況,這是因為so文件在編譯時候沒有鏈接符號到文件裡面,需要在使用gcc編譯的時候加上 -g

閱讀全文

與gdbpython編譯相關的資料

熱點內容
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:496
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:882
盈通伺服器ip地址 瀏覽:789
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:813
新氧app都在哪個城市 瀏覽:731
十二大加密貨幣圖片 瀏覽:315
資料庫日誌自動壓縮 瀏覽:929
手機表格文檔用哪個app 瀏覽:77
找人開發app的公司怎麼樣 瀏覽:651
android藍牙發送數據 瀏覽:428
範文瀾中國通史pdf 瀏覽:755
php常用的設計模式 瀏覽:889
安卓手機怎麼一個一個的截圖 瀏覽:980
javajsondate 瀏覽:356
matlab圖像處理演算法 瀏覽:670
安卓如何禁止手機自動降頻 瀏覽:697