断点

pycharm debug

一个人想着一个人 提交于 2019-11-30 14:23:34
断点的好处: 控制程序的执行 设置断点 查看当前命名空间(程序栈)中的变量 三 Python中的Debug大发 step over 不进入断点,直接向下执行,即下一步 step into 进入程序内部 step out 跳出函数体 Run to cursor 程序会直接到鼠标定位的地方 Step into My Code 直接到自己写的代码里 Resume Program 直接到下一个断点,没有断点则直接执行完 来源: https://www.cnblogs.com/ella-li/p/11595616.html

GCC与GDB使用

青春壹個敷衍的年華 提交于 2019-11-30 11:25:38
GCC基本命令 gcc[选项][文件名] -E:仅执行编译预处理(.c->.i) -S:将c代码转换成汇编代码(.i->.s) -c:仅执行编译操作,不进行连接操作(.s->.o) -o:指定生成的输出文件 -I(大写i):指定头文件目录 -l:指定程序要来链接的库 -L:指定库文件所在的目录名 GDB基本命令 gcc -g:编译源程序 l:列出文件代码清单 display/f expr:设置自动显示的变量 p:显示指定变量的值 r:运行 c:继续运行至下一个断点 b:设断点(函数断点、行断点、条件断点(if i = 100)) tb:临时断点,行号 s:步入 n:步过 until:使一个循环结束 finish:使一个函数结束 info(i):显示各类信息 q:退出调试 help:列出gdb命令种类 help all:查看所有命令 help :查看某一种类命令 help :查看命令的帮助 来源: https://www.cnblogs.com/luoleqi/p/11581837.html

windbg 脚本编写 -- 条件断点

馋奶兔 提交于 2019-11-30 10:20:11
先来解释一下,Windbg的脚本是什么?你可以理解为脚本就是一种语言,就像c或者汇编,但是他不需要编译器将其编译为可执行文件,而是由解释器将其内容翻译为对应的动作。而Windbg的脚本就是利用Windbg作为解释器,将脚本内容翻译为实际的动作。也许这个解释还是有些晦涩,那让我们跳过这些晦涩的概念,来一个简单的例子: .echo "hello world!" 这条命令会显示“ hello world! ”这个字符串,把它保存到c:\1.txt文件,然后在Windbg的命令窗口里输入:$$><c:\1.txt回车,看看屏幕上出现了什么?没错,Windbg将1.txt里的内容当做一条Windbg的命令执行了。这就是一个简单的脚本。 也许有人说,这确实是一个脚本,但是他太弱了,只能打印字符串而已。别急,饭要一口一口吃,脚本要一点一点扩展。先来看看这个$$><,根据前面的例子,很容易看出他的作用是将脚本文件交给Windbg解释,由他完成了将一个txt变成Windbg命令的关键转换。其实你知道了这个,Windbg脚本就算入门了,因为你可以把很多命令写在这个文件里,然后用$$><装载执行。这应该能完成一些功能,不过,这样的用法充其量应该叫做batch,而不是script,因为他只能批量执行命令。那么怎么才能升级到script呢?接下来我们一步一步分解,不过在此之前,还是先把$$><了解透彻。$$

windbg调试-----断点设置

≯℡__Kan透↙ 提交于 2019-11-30 10:18:56
几个基本概念: 1:windbg中的符号和语句命令 ; 命令分隔符 {} 表达式块 $$ 命令中的注释,已 “;”代表注释结束 .catch 当程序错误的时候,防止程序终止 .if .do .while .break .for .else 和C语言中的关键字类似 几个命令: c命令:比较内存 例如: 考虑如下程序 void main() { char rgBuf1[ 100 ]; char rgBuf2[ 100 ]; memset(rgBuf1, 0xCC , sizeof (rgBuf1)); memset(rgBuf2, 0xCC , sizeof (rgBuf2)); rgBuf1[ 42 ] = 0xFF ; } 比较rgBuf1和rgBuf2内存内容可以使用如下命令: 0 : 000 > c rgBuf1 (rgBuf1 + 100 ) rgBuf2 或者 0 : 000 > c rgBuf1 L 100 rgBuf2 线程控制命令: 断点设置命令: 变量显示命令: 调试分析命令: 用户空间: 用户空间即用户模式的应用程序运行的空间,他的虚拟地址由0x00000000 到0x7FFFFFFF 设置断点只是针对某个线程空间,所以如果需要队某个线程使用bp 虚拟内存地址形式的断点的话,需要使用.process [process Number]切换到线程空间 设置断点:

JS一些小知识

℡╲_俬逩灬. 提交于 2019-11-30 09:31:17
一、调试 debug 断点调试 调试步骤:1.打开控制台 2.找到需要调试的文件 3.设置断点 相关操作: watch:监视变量的变化 f8执行到下个断点,如果没有断点就执行完 f10程序单步执行 二、数组 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。 数组的定义 Array 数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。 通过数组字面量创建数组 var arr1 = [1, 2, 3, 4]; //可以通过数组的length属性来获取数组的长度 arr.length //4 2.1 获取数组元素 格式: 数组名[下标(索引)] var arr1 = [1, 2, 3, 4]; arr[0]; //1 arr[4]; //undefined 2.2遍历数组 遍历:遍及所有,对数组的每一个元素都访问一次就叫遍历。 数组遍历的基本语法: for(var i = 0; i < arr.length; i++) { // 数组遍历的固定结构 } 2.3数组中新增元素 //如果下标有对应的值,就会覆盖,如果没有,就会新增一个元素 var arr1 = [1, 2, 3, 4]; arr1[4] = 5; 三、函数 把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数

GDB 调试指南

核能气质少年 提交于 2019-11-30 07:15:11
本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 00 介绍 GDB(GNU Debugger)是 UNIX 及 UNIX-like 下的强大调试工具,可以调试 ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal 等语言,这一份指南我们主要以 c 来作为例子。 01 基础 1.1 判断程序是否可调试 # gdb helloworld Reading symbols from helloWorld...(no debugging symbols found)...done. # gdb helloworld Reading symbols from helloWorld...done. 上面一种有 no debugging symbols found 表示不可调试,下面是可调式的。 或者 readelf 查看段信息: 1# readelf -S helloworld|grep debug 2 [28] .debug_aranges PROGBITS 0000000000000000 0000106d 3 [29] .debug_info PROGBITS

新手学习FFmpeg - 调用API完成两个视频的任意合并

╄→尐↘猪︶ㄣ 提交于 2019-11-30 07:00:12
本次尝试在视频A中的任意位置插入视频B. 在上一篇中,我们通过调整PTS可以实现视频的加减速。这只是对同一个视频的调转,本次我们尝试对多个视频进行合并处理。 Concat如何运行 ffmpeg提供了一个 concat 滤镜来合并多个视频,例如:要合并视频Video A和Video B,通过调用 ffmpeg -i va.mp4 -i vb.mp4 -filter_complex "[0][1]concat[out]" -map '[out]' -y output.mp4 concat 支持多个Input Source,上面的命令只合并了两个视频,通过生成 concat 流程图可以看到一些细节: echo "movie=va.mp4[0];movie=vb.mp4[1];[0][1]concat,nullsink" | graph2dot -o graph.tmp dot -Tpng graph.tmp -o graph.png 这是 concat 典型用法,循环读取输入源,然后通过修改pts完成合并。 concat 是顺序修改,如果需要在video A中某个时间点插入video B,那么 concat 就无法完成了。 顺序合并是通过修改PTS实现,那么变序合并也可以通过修改PTS来实现,下面借助 concat 的逻辑来看看如何实现变序合并。 变序合并 为了方便说明问题

20175324 《信息安全系统设计基础》第一周学习总结

こ雲淡風輕ζ 提交于 2019-11-30 06:35:30
学习目标 1.熟悉Linux系统下的开发环境 2.熟悉vi的基本操作 3.熟悉gcc编译器的基本原理 4.熟练使用gcc编译器的常用选项 5.熟练使用gdb调试技术 6.熟悉makefile基本原理及语法规范 7.掌握静态库和动态库的生成与调用方法 8.理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则 9.了解链接的概念 -gcc简介: GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。 -编译过程: 预处理: gcc –E hello.c –o hello.i;gcc –E 调用cpp 编 译: gcc –S hello.i –o hello.s;gcc –S 调用ccl 汇 编: gcc –c hello.s –o hello.o;gcc -c 调用as 链 接: gcc hello.o –o hello ;gcc -o 调用ld -gdb: 注意使用GCC编译时要加“-g”参数。 GDB最基本的命令有: gdb programm (启动GDB) b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点) run 开始运行程序 bt 打印函数调用堆栈 p

2019-2020-1 20175325 《信息安全系统设计基础》第1周学习总结

白昼怎懂夜的黑 提交于 2019-11-30 06:30:25
2019-2020-1 20175325 《信息安全系统设计基础》第1周学习总结 一、目录: 学习内容 代码调试中的问题和解决过程 感想 PSP 二、学习内容: 计算机:硬件+系统软件 系统得硬件组成: 总线,携带信息字节并负责在各个部件传递 I/O设备,系统与外部世界的联系通道 主存:临时存储设备,用来存放程序处理的数据 处理器:解释和执行村塾在主存中指令的引擎 编译器gcc: 命令格式: gcc+选项+文件名 -E:仅执行编译预处理 -S:将C代码转换成汇编代码 -c:仅执行编译操作,不进行链接 -o:指定生成输出文件 -I:指定头文件目录 -l:指定程序需链接的库 -L:指定库文件所在的目录名 编译过程: 预处理: gcc -E hello.c -o hello.i 汇编: gcc -S hello.i -o hello.s 汇编: gcc -c hello.s -o hello.o 注意 :vim查看hello.o时会出现乱码,常用 objdump -d hello.o 链接: gcc hello.o -o hello 编译 将源文件一起编译: gcc test_a.c text_b.c -o test / gcc *.c -o test 各个源文件分别编译再进行链接: gcc -c test_a.c gcc -c test_b.c gcc -o test_a.o test