GDB调试

Linux的gdb调试 Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。Debug 版本的生成:因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。所以debug版本的体积要大一些。gcc -c hello.c -g —> 生成包含调试信息的中间文件或者。 阅读详情

 一:列文件清单 
1
. List 
(gdb) list line1,line2 

二:执行程序 
  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 

  如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 
利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。

 

 
(gdb)set args –b –x 
(gdb) show args 
backtrace
命令为堆栈提供向后跟踪功能。 
Backtrace
命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。 

三:显示数据 
利用print 命令可以检查各个变量的值。 
(gdb) print p (p
为变量名) 
whatis
命令可以显示某个变量的类型 
(gdb) whatis p 
type = int * 

print
是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容: 

 


l

对程序中函数的调用 
(gdb) print find_entry(1,0) 


l

数据结构和其他复杂对象 
(gdb) print *table_start 
$8={e=reference=
’/000’,location=0x0,next=0x0} 

l 值的历史成分 
(gdb)print $1 ($1
为历史记录变量,在以后可以直接引用 $1 的值) 


l

人为数组 
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:

 
base@length 
因此,要想显示在h后面的10个元素,可以使用h@10: 
(gdb)print h@10 
$13=(-1,345,23,-234,0,0,0,98,345,10) 

四:断点(breakpoint) 
break
命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式: 
l break line-number
使程序恰好在执行给定行之前停止。 
l break function-name
使程序恰好在进入指定的函数之前停止。 
l break line-or-function if condition
如果condition(条件)是真,程序到达指定行或函数时停止。 
l break routine-name
在指定例程的入口处设置断点 

如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下: 
(gdb) break filename:line-number 
(gdb) break filename:function-name 

要想设置一个条件断点,可以利用break if命令,如下所示: 
(gdb) break line-or-function if expr 
例: 
(gdb) break 46 if testsize==100 

从断点继续运行:countinue 命令 

 

 

五.断点的管理 

1
. 显示当前gdb的断点信息: 
(gdb) info break 
他会以如下的形式显示所有的断点信息: 
Num Type Disp Enb Address What 


1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155 
2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168 
(gdb) 


2.


3.


4


5

 


l step 


八.函数的调用 
l call name
调用和执行一个函数 
(gdb) call gen_and_sork( 1234,1,0 ) 
(gdb) call printf(
“abcd”) 
$1=4 
l finish
结束执行当前函数,显示其返回值(如果有的话) 

九.机器语言工具 
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字: 
l $pc
: 程序计数器 
l $fp
: 帧指针(当前堆栈帧) 
l $sp
: 栈指针 
l $ps
: 处理器状态 

十.信号 
gdb
通常可以捕捉到发送给它的大多数信号,通过捕捉信号,它就可决定对于正在运行的进程要做些什么工作。例如,按CTRL-C将中断信号发送给gdb,通常就会终止gdb。但是你或许不想中断gdb,真正的目的是要中断gdb正在运行的程序,因此,gdb要抓住该信号并停止它正在运行的程序,这样就可以执行某些调试操作。 

Handle
命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是: 
l nostop
接收到信号时,不要将它发送给程序,也不要停止程序。 
l stop
接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外) 
l print
接受到信号时显示一条消息 
l noprint
接受到信号时不要显示消息(而且隐含着不停止程序运行) 
l pass
将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。 
l nopass
停止程序运行,但不要将信号发送给程序。 
例如,假定你截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令: 
(gdb) handle SIGPIPE stop print 
请注意,UNIX的信号名总是采用大写字母!你可以用信号编号替代信号名 
如果你的程序要执行任何信号处理操作,就需要能够测试其信号处理程序,为此,就需要一种能将信号发送给程序的简便方法,这就是signal命令的任务。该 命令的参数是一个数字或者一个名字,如SIGINT。假定你的程序已将一个专用的SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采 取某个清理动作,要想测试该信号处理程序,你可以设置一个断点并使用如下命令: 
(gdb) signal 2 
continuing with signal SIGINT(2) 
该程序继续执行,但是立即传输该信号,而且处理程序开始运行. 

十一. 原文件的搜索 
search text:
该命令可显示在当前文件中包含text串的下一行。 
Reverse-search text:
该命令可以显示包含text 的前一行。 

十二.UNIX接口 
shell
命令可启动UNIX外壳,CTRL-D退出外壳,返回到 gdb. 

十三.命令的历史 
为了允许使用历史命令,可使用 set history expansion on 命令 
(gdb) set history expansion on 

小结:常用的gdb命令 
backtrace
显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) 
breakpoint
在程序中设置一个断点 
cd
改变当前工作目录 
clear
删除刚才停止处的断点 
commands
命中断点时,列出将要执行的命令 
continue
从断点开始继续执行 
delete
删除一个断点或监测点;也可与其他命令一起使用 
display
程序停止时显示变量和表达时 
down
下移栈帧,使得另一个函数成为当前函数 
frame
选择下一条continue命令的帧 
info
显示与该程序有关的各种信息 
jump
在源程序中的另一点开始运行 
kill
异常终止在gdb 控制下运行的程序 
list
列出相应于正在执行的程序的原文件内容 
next
执行下一个源程序行,从而执行其整体中的一个函数 
print
显示变量或表达式的值 
pwd
显示当前工作目录 
pype
显示一个数据结构(如一个结构或C++类)的内容 
quit
退出gdb 
reverse-search
在源文件中反向搜索正规表达式 
run
执行该程序 
search
在源文件中搜索正规表达式 
set variable
给变量赋值 
signal
将一个信号发送到正在运行的进程 
step
执行下一个源程序行,必要时进入下一个函数 
undisplay display
命令的反命令,不要显示表达式 
until
结束当前循环 
up
上移栈帧,使另一函数成为当前函数 
watch
在程序中设置一个监测点(即数据断点) 
whatis
显示变量或函数类型 
**************************************************** 
 GNU的调试器称为gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个gdb的前端图形工具,称为xxgdb。gdb 是功能强大的调试程序,可完成如下的调试任务: 
  * 设置断点; 
  * 监视程序变量的值; 
  * 程序的单步执行; 
  * 修改变量的值。 
  在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量: 
   CFLAGS = -g 
   运行 gdb 调试程序时通常使用如下的命令: 
   gdb progname 

  在 gdb 提示符处键入help,将列出命令的分类,主要的分类有: 
  * aliases:命令别名 
  * breakpoints:断点定义; 
  * data:数据查看; 
  * files:指定并查看文件; 
  * internals:维护命令; 
  * running:程序执行; 
  * stack:调用栈查看; 
  * statu:状态查看; 
  * tracepoints:跟踪程序执行。 
  键入 help 后跟命令的分类名,可获得该类命令的详细清单。 


gdb
的常用命令 
命令 解释 
  break NUM 在指定的行上设置断点。 
  bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 
  clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM 
  continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。 
  display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。 
  file FILE 装载指定的可执行文件进行调试。 
  help NAME 显示指定命令的帮助信息。 
  info break 显示当前断点清单,包括到达断点处的次数等。 
  info files 显示被调试文件的详细信息。 
  info func 显示所有的函数名称。 
  info local 显示当函数中的局部变量信息。 
  info prog 显示被调试程序的执行状态。 
  info var 显示所有的全局和静态变量名称。 
  kill 终止正被调试的程序。 
  list 显示源代码段。 
  make 在不退出 gdb 的情况下运行 make 工具。 
  next 在不单步执行进入其他函数的情况下,向前执行一行源代码。 
  print EXPR 显示表达式 EXPR 的值。 

******gdb
使用范例************************ 
----------------- 
清单 一个有错误的 C 源程序 bugging.c 
代码: 

----------------- 
1
 #i nclude 
2 
3
 static char buff [256]; 
4
 static char* string; 
5
 int main () 
6
 { 
7
   printf ("Please input a string: "); 
8
   gets (string);   
9
   printf ("/nYour string is: %s/n", string); 
10 } 


----------------- 
  上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误: 
$ gcc -o bugging -g bugging.c 
$ ./bugging 
Please input a string: asfd 
Segmentation fault (core dumped) 
为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行: 
1
.运行 gdb bugging 命令,装入 bugging 可执行文件; 
2
.执行装入的 bugging 命令 run; 
3
.使用 where 命令查看程序出错的地方; 
4
.利用 list 命令查看调用 gets 函数附近的代码; 
5
.唯一能够导致 gets 函数出错的因素就是变量 string。用print命令查看 string 的值; 
6
.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第8行处设置断点 break 8; 
7
.程序重新运行到第 8行处停止,这时,我们可以用 set variable 命令修改 string 的取值; 
8
.然后继续运行,将看到正确的程序运行结果。

进入的单步执行 
如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish 
六.变量的检查和赋值 
l whatis:
识别数组或变量的类型 
l ptype:
比whatis的功能更强,他可以提供一个结构的定义 
l set variable:
将值赋予变量 
l print
除了显示一个变量的值外,还可以用来赋值 

七.单步执行 
l next 
不进入的单步执行 
.清除原文件中某一代码行上的所有断点 
(gdb)clean number 
注:number 为原文件的某个代码行的行号 
.允许使用某个断点 
(gdb) enable breakpoint 1 
该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y 
禁止使用某个断点 
(gdb) disable breakpoint 1 
该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n 
删除指定的某个断点: 
(gdb) delete breakpoint 1 
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点 
(gdb) delete breakpoint 

 

 

GDB远程调试 gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。要用gdb调试程序,必须在编译时加上-g和-ggdb选项,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。 阅读详情

相关推荐

GDB c++ 调试

GDB c++ 调试程序编译1. 安装gcc (CentOS):2. 编译GDB debug1. 安装 gdb2. 进入调试环境3. 基本操作4. 设置断点 程序编译 首先,在debug之前要对程序进行编译,可以用 gcc 进行编译。 检查是否安装 gcc: rpm -qa | grep gcc 若没有gcc, 请先安装。 1. 安装gcc (CentOS): yum -y install gc...

weixin_44387066的博客 1373

GDB调试精粹及使用实例

 一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序的参数,

超空间 1454

【C++之GDB调试】GDB调试从入门到精通

GDB调试对于C/C++开发者非常重要。

lemaden520的博客 1996

gdb调试简要总结

gdb调试

goodgoodstudy___的博客 676

【项目立项管理、项目整合管理】30天通过软考高项-第二天

①项目或阶段的概述;②范围目标、范围的评估标准,证明达到完⼯标准的证据;③质量目标、项目和产品质量的评估标准、相关核实信息和实际里程碑交付日期以及偏差原因;④成本目标,包括可接受的成本区间、实际成本,产⽣任何偏差的原因等;⑤最终产品、服务或成果的确认信息的总结;⑥进度计划目标,包括成果是否实现项目预期效益:如果在项目结束时未能实现效益,则指出效益实现程度并预计未来实现情况;

weixin_42520723的博客 1002

WVP+ZLM国标平台实战:从设备注册失败到视频播放黑屏,我遇到的5个典型问题与解法

部署WVP+ZLM国标视频平台时,设备注册失败、视频播放黑屏等问题常常让运维人员头疼不已。本文将基于真实运维场景,剖析五个最具代表性的故障案例,提供从网络配置到版本兼容性的全链路解决方案。

weixin_33178839的博客 362

GDB命令详解(进一步学习)

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 一般来说,GDB主要完成下面四个方面的功能: (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 (2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表...

changdizm的博客 573

安装keil软件时安装不了芯片包怎么回事?芯片包安装路径放在Keill里的packs下面,弹框提示报错:Errors retumned from cpackget...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2207

gdb调试 入门

程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下运行。GDB中的命令很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。

chumingqian的博客 921

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1307

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8115

GDB调试命令详解

GDB是什么 调试程序 程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程序进行调试。 所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。 也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低

Hello World 9万+

虚幻商城 Quixel 免费资产一键入库

在免费领取所有Megascans之后,我们只是有了获取 Quixel Megascans 资产的资格,但是没有入 Fab 库,本文将讲解通过脚本将 Quixel 所有资产入库 Fab。

一碗清深的博客 3339

gdb调试详解

一、gdb调试coredump文件 二、gdb调试多线程       【Note】:

青萍之末的博客 1万+

【AirPlay】苹果认证MFI学习

配件认证是一个过程,通过这个过程,可验证其配件符合MFi技术规范,并通过苹果指定的任何认证测试。MFi门户中的产品计划 "认证 "页面将指导你完成特定配件所需的认证步骤,并指出何时完成所有要求。在完成所有MFi认证要求之前,你不得制造、分发或销售任何配件。在开始MFi认证过程之前,你必须测试你的配件,以确保它符合最新的MFi技术规范,通过产品计划 "测试计划 "上的所有适用测试,并与它将声称具有兼容性的每个苹果设备兼容。

天天的博客 2276

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

gdb调试小结

一、启动 1、gdb 2、调试在线进程 (1)启动gdb时链接目标进程 (2)gdb中链接目标进程: (3)断开链接: 二、信息显示 1、栈信息 2、变量 3、寄存器 4、内存 5、源代码 6、显示格式 三、断点 1、设置断点 2、 查看、删除断点 3、设置无效、有效断点: 4、条件断点 5、监视点 6、断点命令 四、其他 1、强制函数返回 2、强制调用函数 参考 ...

milletluo的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何使用GDB调试

文章目录一、GDB的介绍二、GDB的使用三、使用GDB调试实际例子 一、GDB的介绍 GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。 二、GDB的使用 GDB的使用条件 程序要用GDB调试,需要添加调试信息。 添加方法: gcc的-g选项为程序添加调试信息。 例如:gcc –g –o helloworld helloworld.c 启动GDB 启动方法: gdb [程序名称

Harriet的博客 6558

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++调试@认识GDB调试

GDB(GNU Debugger)是Linux及Unix环境中常用的程序调试工具,windows 下也有许多移植版可以用深入理解程序执行:GDB命令行提供了对程序执行流程的底层控制,帮助你更深入地理解程序的运行机制。通过手动控制每一步执行,你能够更细致地观察变量变化、函数调用、内存状态等,这对于复杂问题的排查非常有帮助。轻量级和灵活性:相比IDE,GDB是一个轻量级工具,尤其适合远程服务器或资源受限环境下的调试。

xuchaoxin1375的博客 1368

GDB调试大全

GDB详细调试大全

m0_60524373的博客 4126

gdb调试总结

在 root用户下,就在/root目录, 在 home用户下就在/home目录下,定义一个.gdbinit文件即可,不存在可以新建一个。然后在文件里面写上gdb命令Apache Web Server 源码为例,源码目录里面有一个.gdbinit文件set $i = 0elseendendend# 省略部分代码。

u010185392的博客 1491

gdb调试

命令名称命令缩写命令说明runr运行一个程序continuec让暂停的程序继续运行nextn运行到下一行steps如果有调用函数,进入调用的函数内部(相当于step intountilu运行到指定行停下来finishfi结束当前调用函数,到上一层函数调用处returnreturn结束当前调用函数并返回指定值,到上一层函数调用处jumpj将当前程序执行流跳转到指定行或地址printp打印变量或寄存器值backtracebt查看当前线程的调用堆栈。

m0_74186706的博客 2753
上一篇: grep详解
下一篇: vm 中鼠标不对解决方法
comlc
博客等级 码龄19年 9粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值