展开

关键词

Python 拓展 GDB(四)

欢迎来到《用python拓展gdb》的最后一篇。第一篇结尾,我提到了通用语言相对于领域特定语言的一项优势,即在处理数据上更加灵活。 对于通用语言来说,gdb暴露的接口不过是又一个库而已。在本篇中,我们会把python当作一门“胶水语言”,A面是gdb的接口,B面是一个终端界面的程序。 小结如上面的例子所示,我们成功地用python实现了内嵌于gdb的客户端。该客户端可以向外界暴露出gdb调试时的信息。 依据同样的思路,我们也可以在gdb内实现内嵌的服务端,这样外界就能动态修改gdb调试的方式。当然,这一切离不开python这把“瑞士军刀”。《用python拓展gdb》系列到此就结束了。 如果你是想了解更多关于gdb调试的信息,希望今后遇到相关问题时能想起编写python拓展予以解决。

38720

gdb加载python脚本的方法

https:blog.csdn.netxuzhinaarticledetails76733977 脚本名称为hello.py,内容如下:import gdb class HelloPrefixCommand __init__(hello, gdb.COMMAND_SUPPORT, gdb.COMPLETE_NONE, True )HelloPrefixCommand() 加载方法1: sudo gdb httpd -x hello.py 查看一下: (gdb) help hellojust to say hello List of hello subcommands: Type help hello followed 加载方法2: (gdb) source hello.py 查看一下: (gdb) help hellojust to say hello List of hello subcommands: Type

79920
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用GDB来调试Python里optimized out的问题

    然而,在现网服务器gdb调试python时,却因为缺少乱七八糟的库而无法分析。所以,最靠谱的办法是gdb generate-core-file 生成core文件,拖回开发机上面分析。 -gdb.py环境搞好后,就可以开心地调试python了! (gdb) py-bt#5 (frame information optimized out)#9 (frame information optimized out)简直一脸懵逼! 看了下gdb的脚本和python代码,发现虽然f_code参数被优化掉了,但是co参数、freevars参数还在啊,根据python代码里freevars的用法,只要-1, -2, -3地退格使用,就是对应的 python代码局部变量指针地址了,so,我依葫芦画瓢搞了个py-vars命令,自动去遍历每个局部变量,然后print出来(gdb) py-vars self =

    1.3K190

    ubuntu下C++如何调用python程序,gdb调试C++代码

    Linux下gdb调试C++代码:http:jingyan.baidu.comarticleacf728fd464984f8e410a369.html主要ubuntu下使用C++调用Python:#python namespace std; void img_processing();int great_function_from_python(int a); int main() { Py_Initialize(); python 2.7 和 python 3.5是有区别的。 python 3.5需要用wchar_t char str[] = Python; Py_SetProgramName(str); if(!Py_IsInitialized()) cout

    73990

    python的性能监控的几种方法

    python的内置的traceback的结果,也是我们预期的。 实际上,使用gdb得到的结果:?可见,python进程的stack,是解释器的二进制的stack。 3,py-btpython提供了gdb的能力,但是对gdb的版本有些要求。搭起来环境,发现gdb可以dump出来python的backtrace。 順藤摸瓜,分析libpython.py的代码发现:a,使用gdb来dump出来cpython的stackb,过滤掉非python的stack,方法就是判断frame的名字是不是“PyEval_EvalFrameEx 可见,gdb提供了一个很好的例子,使用旁路的方法,可以获取到python的backtrace。 4,pstackpstack和gdb的原理类似,都是使用kernel提供的ptrace这个syscall实现的。相比于gdb,pstack更加合适。

    78910

    日更系列:如果gdb打印不出std容器怎么办

    ,但是2011年gdb之后的应该就自带这个python脚本功能。 以下这段用引用自该帖子:很好地打印出数据结构是一些GDB扩展 机制的Python 代码的函数。GDB 手册中有一节介绍了GDB中的漂亮打印。 在线手册有一个相当广泛的部分,关于用 Python编写你自己的 GDB 漂亮的打印机。那么我使用以下命令看下是否gdb启动的时候加载了这个pretty-printer。 history filename ~.gdb_history source usrsharegdbauto-loadusrlib64libstdc++.so.6.0.19-gdb.pyset auto-load python-scripts on这里还添加了一些好用的功能,比如说保存gdb历史命令等。

    21320

    Linux 编译安装 GCC 4.8

    编译安装 GCC 4.8GCC4.8发布啦,这个脚本在之前4.7的基础上做了点改进,移除一些过时的组件,增加了检测不到时自动下载源码包PS:4.8.1开始全面支持C++11特性,并且脱离了ppl库,gdb ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 安装完成后,把libstdc++-v3python 复制到.gdb 编辑.gdbinit,添加 python ,修复环境变量的一些小问题 2013-05-24 增加安装pretty-printer的方法 2013-06-03 更新gcc到4.8.1,更新基础库,更新gdb到7.6,添加clean功能,gdb添加 python支持(用于pretty-printer) 2013-10-29 更新gcc到4.8.2,更新gdb到7.6.1,更新GMP到5.1.3 2013-12-13 更新binutils到2.24, 更新gdb到7.6.2,移除对ppl的依赖,显式开启gold等一些选项,显式开启链接时优化选项 2014-05-23 更新gcc到4.8.3,更新gdb到7.7.1,完全移除对ppl的依赖,同步gcc4.9

    2.2K20

    GDB 调试笔记

    gdb命令一般可以使用 gdb program 或者使用 gdb progrma core 。如果想对正在执行的进程进行调试,则可以使用 gdb -p 123 。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 (gdb) file gdb-sample r run的简写,运行被调试的程序。 (gdb) b 8(gdb) b main(gdb) b *main(gdb) b *0x804835c(gdb) d bt 查看函数运行时堆栈 (gdb) bt disas 默认反汇编对应的方法 (gdb (gdb) q record 录制程序过程 (gdb) record help GDB帮助命令,提供对GDB名种命令的解释说明。 补充小工具python dbg工具,可以通过 apt-get install -y python-dbg 进行安装,然后可以在其中使用 py-bt 、 py-list 等命令。

    23930

    MIPS-漏洞研究常用工具及调试方法

    install libqt4-opengl python-opengl python-qt4 python-qt4-gl python-numpy python-scipy python-pip sudo 调试qemu-system GDB调试下载各架构版本的gdbserver https:github.come3pemembedded-toolkit之后拷贝到qemu虚拟机中?. 之后在本机的gdb中进行连接调试gdb-multiarch level1pwndbg> set architecture mipspwndbg> set endian big pwndbg> target qemu-user GDB调试正常情况下单个mips的程序运行要有足够的lib库依赖,把qemu-mips-static放到完整的路由器文件系统squashfs-root的根目录中运行程序就可以了,即: gdb-multiarch level1> set architecture mips> target remote :1234可能出现的问题 : .stack_bof_01: Invalid ELF

    28220

    LINUX下gdb无法debug,提示ImportError: No module named libstdcxx

    Ubuntu下使用gdb调试C++程序,提示:ImportError: No module named ‘libstdcxx’。貌似CentOS没有这样的问题。 There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. theone@ubuntu:~$ gdb for configuration details.For bug reporting instructions, please see:.Find the GDB manual and other online at:.For help, type help.Type apropos word to search for commands related to word.theone@ubuntu:~$ python gdbinit 然后复制如下代码到.gdbinit文件:pythonimport sys sys.path.append(usrsharegcc-4.8python)end即在系统的path中添加gcc自带的python

    97350

    MIPS-漏洞研究常用工具及调试方法

    install libqt4-opengl python-opengl python-qt4 python-qt4-gl python-numpy python-scipy python-pip sudo 调试qemu-system GDB调试下载各架构版本的gdbserver https:github.come3pemembedded-toolkit之后拷贝到qemu虚拟机中?. 之后在本机的gdb中进行连接调试gdb-multiarch level1pwndbg> set architecture mipspwndbg> set endian big pwndbg> target qemu-user GDB调试正常情况下单个mips的程序运行要有足够的lib库依赖,把qemu-mips-static放到完整的路由器文件系统squashfs-root的根目录中运行程序就可以了,即: gdb-multiarch level1> set architecture mips> target remote :1234可能出现的问题 : .stack_bof_01: Invalid ELF

    22940

    gdb调试容器和命令保存

    一、gdb调试容器或者智能指针的内容有时候我们需要debug一些core文件或者程序,但是如果遇到STL容器,p打印出的是一些红黑树或者原始的数据机构,这给我们调试带来不必要的麻烦。 gdb 内置了 Python 支持,因此可以轻松编写一个函数来打印出任何 stl 结构的内容。gcc 4.5 已经提供所需的 python 脚本,以使 gdb 智能地处理 stl 数据结构。 在gdb调试的时候,使用source ~.gdbinit加载这些宏操作。如果你的gdb在运行当中,需要重启启用下,这些宏才生效。阅读这些代码宏,也可以帮助你理解stl结构。 顺带说下,在~.gdbinit可以放入你常用的一些gdb设置命令。 set history remove-duplicates 默认情况下,gdb 将历史记录保存到当前目录的..gdb_history 文件中。

    608400

    想学CPython,Python之父Guido亲上阵

    大多数stdlib是用Python编写的,我们也需要doc帮助2、你必须了解Git和GitHub!如果不会,请看这:? https:devguide.python.orggitbootcamp3、你必须有10年以上的Python经验!开个玩笑? 代码1、最简单的:用 print()2、其次,用 breakpoint()▌调试C代码1、如果你有Python代码来重现问题,请先尝试前面的部分(调试Python代码)。 2、最简单的:用 printf()3、GDB (Linux):https:wiki.python.orgmoinDebuggingWithGdb? $ gdb .python.exe…(gdb) run SCRIPTNAME.py ARGUMENT …$ gdb -ex r --args python SCRIPTNAME.py ARGUMENT

    33210

    Linux 编译安装 GCC 4.9

    2.7.8 gdb 7.7.1 (如果存在ncurses-devel包) 注:(所有的库都会被安装在$PREFEX_DIR里) 额外建议:给特定用户安装 gdb的pretty-printer 用以友好打印 stdc++的stl容器在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 安装完成后,把libstdc++-v3python 复制到.gdb 编辑.gdbinit,添加 python import sys import os p = os.path.expanduser(~.gdbpython) print p if os.path.exists History:2014-04-23 Created 2014-04-28 增加一些控制选项 2014-05-23 更新gdb到7.7.1 2014-07-18 更新gcc到4.9.1,更新python 到2.7.8 2014-11-12 更新gcc到4.9.2,更新gdb到7.8.1

    2.5K10

    gdb基础命令和常用操作补充

    GDB是Unix下的一个程序调试工具,类似于windows下面的VC调试器,区别在于GDB采用全命令行控制。 gdb attach 调试一个已经运行服务程序 gdb .binchat_server $(pgrep  chat_server) gdb core 调试程序core down时候产生的core文件  program counter ▪ thread apply all bt   backtrace for every thread ▪ dprintf           dynamic printf ▪ python :           define custom commands by inheriting from gdb.Command class ▪ python:           hook events to invoke python functions using gdb.events.stop.connect ▪ gcc’s -g and -O are orthogonal 经验:如果某个函数的局部变量发生访问越界

    76600

    conda pip 安装 dgl 并运行demo 出现:Segmentation fault (core dumped) 错误

    安装dgl 并运行的时候,出现了如上错误,很是郁闷;使用 gdb python; run train.py 进行调试,发现是torch的问题;我猜测估计是torch 安装的版本过于新;于是重新安装 1.0.0 版本; 解决上述问题;dgl-cu90 0.4.1torch 1.0.0~Desktopdglexamplespytorchgcn$ python train.py --dataset cora -- 保持更新,更多内容请关注 cnblogs.comxuyaowen;参考链接:https:github.comfacebookresearchmaskrcnn-benchmarkissues21gdb python >> run demo.py.....>> bt (列出调用栈)上述运行模式,可以 run the python script via gdb and show the traceback; 很好的命令行调试技巧

    21720

    Caffe源码调试

    激活GDB使用GDB启动调试,执行gdb --args buildtoolscaffe train --solver examplesmnistlenet_solver.prototxt,--args表示我们调试时需要输入的参数 执行结果:$ gdb --args buildtoolscaffe train --solver examplesmnistlenet_solver.prototxtGNU gdb (GDB) Red x86_64 atk-2.14.0-1.el7.x86_64 atlas-3.10.1-10.el7.x86_64 boost-filesystem-1.53.0-26.el7.x86_64 boost-python 1.36.8-2.el7.x86_64 pcre-8.32-15.el7_2.1.x86_64 pixman-0.34.0-1.el7.x86_64 protobuf-2.5.0-8.el7.x86_64 python-libs 查看变量命令为p var,命令与结果如下:(gdb) p channels_$1 = 0 (gdb) p channel_axis_$2 = 1此时,channels_值为0。

    71600

    Python 源码学习:编译器和虚拟机

    Python 解释器(Python Interpreter)由 Python 编译器(Python Compiler)和 Python 虚拟机(Python Virutal Machine)两部分组成。 当我们通过 Python 命令执行 Python 代码时,Python 编译器会将 Python 代码编译为 Python 字节码(bytecode);随后 Python 虚拟机会读取并逐步执行这些字节码 (gdb) r(gdb) n# ...如果有对应版本的源码文件的话也可以直接断点在 switch (opcode) { 所在的行数,这里我们不断地往后执行直到这一行之后:(gdb) layout split ) p opcode$9 = 105(gdb) p oparg$10 = 0BUILD_MAP 稍微复杂一些,它会构造一个 Python 中的字典对象(源码中 PyDictObject 结构体的实例对象 gdb 调试的方法找到其实际执行的代码;相比于汇编指令,字节码指令实际上代表了由许多行代码组成的功能,而 Python 虚拟机则是通过字节码指令模拟出了对汇编指令的执行过程。

    8740

    samba源码安装及调试

    # CentOS 7yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation libsemanage-python libxslt perl perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python lmdb-devel jansson-devel gpgme-devel python-gpgme libarchive-devel2. 调试gdb --args .binsmbd -d 10 -i -lvarlogsamba -setcsambasmb.confthen:b exitrunAt the breakpoint type bt (gdb) bt#0 0x00007ffff381e163 in __epoll_wait_nocancel () from lib64libc.so.6#1 0x00007ffff649df03 in

    41630

    交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    GDB 交叉编译与使用实例嵌入式平台中使用 GDB 时会用到 GDB 的远程 (remote) 调试模式:在目标板上通过 gdbserver 运行待调试的程序,在宿主机上运行 gdb 并通过 target 不在目标板上直接运行 gdb 进行调试是因为目标板硬件配置低,跑不动 gdb,当然,不排除某些嵌入式平台的性能很强劲,能够正常运行 gdb。 2.2 下载源码从 ftp:ftp.gnu.orggnugdb 下载最新版源码 gdb-8.2.tar.gz,解压:tar zxvf .gdb-8.2.tar.gzcd gdb-8.22.3 编译 gdb 主机:首先在 SHELL 命令行里运行 gdb 应用.gdb运行上一条命令后,SHELL 将进入 gdb 模式,下列几条指令中(gdb) 是提示符:(gdb) target remote 192.168.202.141 参考资料嵌入式 Linux 的 GDB 调试环境建立 Python Exception 异常信息 QT 远程调试 ARM 板中 python 的问题5. 修改记录2019-04-11 初稿

    1.2K00

    相关产品

    • 消息队列 TDMQ

      消息队列 TDMQ

      消息队列 TDMQ 是基于 Apache 顶级开源项目Pulsar自研的金融级分布式消息中间件,是一款具备跨城高一致、高可靠、高并发的分布式消息队列,拥有原生Java 、 C++、Python、GO 多种API, 支持 HTTP 协议方式接入,可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券