导航:首页 > 源码编译 > 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编译相关的资料

热点内容
cctv16奥林匹克频道加密播出 浏览:897
c盘微信文件夹隐私 浏览:227
asp压缩mdb 浏览:670
node开源论坛源码 浏览:8
单片机比手机芯片还贵 浏览:35
java课表 浏览:555
如何在pdf里面修改 浏览:929
橙光制作器档案框在哪个文件夹 浏览:991
php如何抓取网页数据 浏览:642
计数器单片机 浏览:966
游戏aoi算法 浏览:845
phpmysqlint 浏览:914
怎么从appstore商城买东西 浏览:186
大秀直播平台源码 浏览:425
java视屏 浏览:935
电脑中如何给程序加密 浏览:240
java排序容器 浏览:942
职称证书在哪个app下载 浏览:363
四九算法算男女 浏览:660
javawindows8 浏览:498