gdb基本命令

程序调试利器——GDB使用指南 GDB是探查查询运行中各种疑难问题的利器。在实际应用中,问题产生的原因通常要复杂得多。程序可能在标准库中产生了Crash,整个堆栈可能都是标准库代码;程序可能由于我们的代码的操作,最终在三方中间件中产生了问题;整个异常堆栈可能都不包含我们自己开发的代码;面对被三方库不知以何种方式使用的变量。我们除了需要熟悉GDB的使用之外,在这些复杂的实际问题上,我们还需要尽可能多地了解我们使用的其它库的机制和原理。下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】 阅读详情

gdb基本命令 

本文介绍使用gdb调试程序的常用命令。 

主要内容: 

[简介] 

[举例] 

[其他] 


[简介] 

============= 

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 

一般来说,GDB主要完成下面四个方面的功能: 

(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 

(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 

(3)当程序被停住时,可以检查此时你的程序中所发生的事。 

(4)动态的改变你程序的执行环境。 


兴趣是最好的老师,这里先整理总结一下在调试的过程中经常遇到的问题。带着这些问题进行学习和实践可以有助于加深印象。 再往后是本人实践过程中总结的常见命令,如有什么问题或者建议,都可以联系我,谢谢!^_^ 

(1)如何打印变量的值?(print var) 

(2)如何打印变量的地址?(print &var) 

(3)如何打印地址的数据值?(print *address) 

(4)如何查看当前运行的文件和行?(backtrace) 

(5)如何查看指定文件的代码?(list file:N) 

(6)如何立即执行完当前的函数,但是并不是执行完整个应用程序?(finish) 

(7)如果程序是多文件的,怎样定位到指定文件的指定行或者函数?(list file:N) 

(8)如果循环次数很多,如何执行完当前的循环?(until) 

(9)多线程如何调试?(???) 


作者:QuietHeart 

Email: quiet_heart000@126.com 



[举例] 

============= 

*启动gdb 

$gdb 

这样可以和gdb进行交互了。 


*启动gdb,并且分屏显示源代码: 

$gdb -tui 

这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p. 


*启动gdb调试指定程序app: 

$gdb app 

这样就在启动gdb之后直接载入了app可执行程序,需要注意的是,载入的app程序必须在编译的时候有gdb调试选项,例如'gcc -g app app.c',注意,如果修改了程序的源代码,但是没有编译,那么在gdb中显示的会是改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱的。 


*启动程序之后,再用gdb调试: 

$gdb <program> <PID> 

这里,<program>是程序的可执行文件名,<PID>是要调试程序的PID.如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。 


*启动程序之后,再启动gdb调试: 

$gdb <PID> 

这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID,<PID>是要调试程序的PID.这样gdb就附加到程序上了,但是现在还没法查看源代码,用file命令指明可执行文件就可以显示源代码了。 



**启动gdb之后的交互命令: 

交互命令支持[Tab]补全。 


*显示帮助信息: 

(gdb) help 


*载入指定的程序: 

(gdb) file app 

这样在gdb中载入想要调试的可执行程序app。如果刚开始运行gdb而不是用gdb app启动的话可以这样载入app程序,当然编译app的时候要加入-g调试选项。 


*重新运行调试的程序: 

(gdb) run 

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


*修改发送给程序的参数: 

(gdb) set args no 

这里,假设我使用"r yes"设置程序启动参数为yes,那么这里的set args会设置参数argv[1]为no。 


*显示缺省的参数列表: 

(gdb) show args 


*列出指定区域(n1到n2之间)的代码: 

(gdb) list n1 n2 

这样,list可以简写为l,将会显示n1行和n2行之间的代码,如果使用-tui启动gdb,将会在相应的位置显示。如果没有n1和n2参数,那么就会默认显示当前行和之后的10行,再执行又下滚10行。另外,list还可以接函数名。 

一般来说在list后面可以跟以下这们的参数: 

<linenum>   行号。 

<+offset>   当前行号的正偏移量。 

<-offset>   当前行号的负偏移量。 

<filename:linenum>  哪个文件的哪一行。 

<function>  函数名。 

<filename:function> 哪个文件中的哪个函数。 

<*address>  程序运行时的语句在内存中的地址。 


*执行下一步: 

(gdb) next 

这样,执行一行代码,如果是函数也会跳过函数。这个命令可以简化为n. 


*执行N次下一步: 

(gdb) next N 


*执行上次执行的命令: 

(gdb) [Enter] 

这里,直接输入回车就会执行上次的命令了。 


*单步进入: 

(gdb) step 

这样,也会执行一行代码,不过如果遇到函数的话就会进入函数的内部,再一行一行的执行。 


*执行完当前函数返回到调用它的函数: 

(gdb) finish 

这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish. 


*指定程序直到退出当前循环体: 

(gdb) until 

或(gdb) u 

这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。 


*跳转执行程序到第5行: 

(gdb) jump 5 

这里,可以简写为"j 5"需要注意的是,跳转到第5行执行完毕之后,如果后面没有断点则继续执行,而并不是停在那里了。 

另外,跳转不会改变当前的堆栈内容,所以跳到别的函数中就会有奇怪的现象,因此最好跳转在一个函数内部进行,跳转的参数也可以是程序代码行的地址,函数名等等类似list。 


*强制返回当前函数: 

(gdb) return 

这样,将会忽略当前函数还没有执行完毕的语句,强制返回。return后面可以接一个表达式,表达式的返回值就是函数的返回值。 


*强制调用函数: 

(gdb) call <expr> 

这里,<expr>可以是一个函数,这样就会返回函数的返回值,如果函数的返回类型是void那么就不会打印函数的返回值,但是实践发现,函数运行过程中的打印语句还是没有被打印出来。 


*强制调用函数2: 

(gdb) print <expr> 

这里,print和call的功能类似,不同的是,如果函数的返回值是void那么call不会打印返回值,但是print还是会打印出函数的返回值并且存放到历史记录中。 


*在当前的文件中某一行(假设为6)设定断点: 

(gdb) break 6 


*设置条件断点: 

(gdb) break 46 if testsize==100 

这里,如果testsize==100就在46行处断点。 


*检测表达式变化则停住: 

(gdb) watch i != 10 

这里,i != 10这个表达式一旦变化,则停住。watch <expr> 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序(也是一种断点)。 


*在当前的文件中为某一函数(假设为func)处设定断点: 

(gdb) break func 


*给指定文件(fileName)的某个行(N)处设置断点: 

(gdb) break fileName:N 

这里,给某文件中的函数设置断点是同理的。 


*显示当前gdb断点信息: 

(gdb) info breakpoints 

这里,可以简写为info break.会显示当前所有的断点,断点号,断点位置等等。 


*删除N号断点: 

(gdb) delete N 


*删除所有断点: 

(gdb) delete 


*清除行N上面的所有断点: 

(gdb) clear N 



*继续运行程序直接运行到下一个断点: 

(gdb) continue 

这里,如果没有断点就一直运行。 


*显示当前调用函数堆栈中的函数: 

(gdb) backtrace 

命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。当然,这里也会显示出当前运行到了哪里(文件,行)。 


*查看当前调试程序的语言环境: 

(gdb) show language 

这里,如果gdb不能识别你所调试的程序,那么默认是c语言。 


*查看当前函数的程序语言: 

(gdb) info frame 


*显示当前的调试源文件: 

(gdb) info source 

这样会显示当前所在的源代码文件信息,例如文件名称,程序语言等。 


*手动设置当前的程序语言为c++: 

(gdb) set language c++ 

这里,如果gdb没有检测出你的程序语言,你可以这样设置。 


*查看可以设置的程序语言: 

(gdb) set language 

这里,使用没有参数的set language可以查看gdb中可以设置的程序语言。 


*终止一个正在调试的程序: 

(gdb) kill 

这里,输入kill就会终止正在调试的程序了。 


*print显示变量(var)值: 

(gdb) print var 

这里,print可以简写为p,print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含函数调用,复杂数据结构和历史等等。 


*用16进制显示(var)值: 

(gdb) print /x var 

这里可以知道,print可以指定显示的格式,这里用'/x'表示16进制的格式。 

可以支持的变量显示格式有: 

x  按十六进制格式显示变量。 

d  按十进制格式显示变量。 

u  按十六进制格式显示无符号整型。 

o  按八进制格式显示变量。 

t  按二进制格式显示变量。 

a  按十六进制格式显示变量。 

c  按字符格式显示变量。 

f  按浮点数格式显示变量。 



*如果a是一个数组,10个元素,如果要显示则: 

(gdb) print *a@10 

这样,会显示10个元素,无论a是double或者是int的都会正确地显示10个元素。 


*修改运行时候的变量值: 

(gdb) print x=4 

这里,x=4是C/C++的语法,意为把变量x值改为4,如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4。 


*显示一个变量var的类型: 

(gdb) whatis var 


*以更详细的方式显示变量var的类型: 

(gdb) ptype var 

这里,会打印出var的结构定义。 

**


[其他] 

============= 

*在Qt4.x环境中打印QString msg;的msg变量: 

步骤如下: 

1)定义一个宏printqstring 

define printqstring 

    printf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->size 

    set $i=0 

    while $i < $arg0.d->size 

        set $c=$arg0.d->data[$i++] 

        if $c < 32 || $c > 127 

                printf "\\u0x%04x", $c 

        else 

                printf "%c", (char)$c 

        end 

    end 

    printf "\"\n" 

end 

2)(gdb) printqstring msg 

这里,这个宏可以在gdb中直接定义,据说也可以写到$HOME/.gdbinit,这样每次启动自动加载。 


*调试同时指明生成core文件: 

$gdb <program> core 

用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。当程序非法崩溃的时候会产生一个core文件,然后使用这个命令,会直接定位到发生程序崩溃的位置。注意:有时需要设置系统命令“ulimit -c unlimited”才能产生core文件。 



**没有实践过的 

*print显示存储块,如显示h后面的10个整数: 

print h@10 

**


原文

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注) 本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。 阅读详情

相关推荐

HWDB1.1数据集处理全攻略:从gnt文件到PNG图片的完整转换教程

本文提供了HWDB1.1数据集处理的完整教程,详细解析了gnt二进制文件格式,并给出了从文件解析、标签映射到批量转换为PNG图片的Python脚本。教程涵盖了环境准备、跨平台解压方案,以及为PyTorch等深度学习框架准备数据的最佳实践,是进行手写汉字识别研究不可或缺的实用指南。

2w3e4r5t6y的博客 627

GDB调试工具

3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序(按着自己的想法运行)。GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。2、可让被调试的程序在你所指定的调置的断点处停住。edit [file:]function查看停止的信息。step如果有函数,进入函数,查看函数里面的信息。print expr 打印输出。next一步一步运行。GDB调试正在运行的进程。

qq_43341187的博客 4316

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

GDB调试工具的使用方法详解【图文教程】

GDB(GNU Debugger)是一个功能强大的命令行调试工具,用于调试 C、C++ 等程序。它能够帮助开发者定位和修复程序中的 bug,查看程序状态、变量值以及函数调用堆栈。下面详细介绍 GDB 的使用方法和过程,并附上相应的代码示例。

qq_42037383的博客 3630

航空大数据——项目资源汇总及开源(四)

ADS-B项目开源大礼包

cyc头发还挺多的博客 4979

别再羡慕专业版!用这个批处理脚本,一键给Win11家庭版装上官方沙盒

本文详细介绍了如何通过批处理脚本在Windows 11家庭版上安装官方Windows沙盒(Windows Sandbox),无需复杂操作即可享受专业版功能。脚本自动激活系统内置组件,提供安全隔离的虚拟化环境,适用于软件测试、安全浏览等场景。

weixin_26757925的博客 490

Linux笔记---调试工具GDB(gdb)

GDB,全称GNU Debugger,是一个功能强大的开源调试工具,广泛用于Unix和类Unix系统,以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况,帮助定位和修复程序中的错误。

2302_80372340的博客 5475

Cursor生成JAVA相关的关键词提示规则

你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容。始终遵循 SOLID 原则,保持高内聚低耦合的 Spring Boot 应用设计。Java 和 Spring Boot 使用规范。Spring Boot 具体规范。

kitonGao的博客 2115

【gdb】超详细介绍

GDB调试非常重要的,是了解底层的重要窗口,那么我们进一步开始学习。GDB是什么?–就是让你在程序running时,了解内部发生了什么?其实就是一个非图形界面的IDE,可以打断点做debug多平台: 可以运行在linux,win,macOS多语言: 汇编/C/C++/Go/Rust。

呆呆的猫的博客 4036

RT-DETR改进策略【Conv和Transformer】| HiLo注意力机制 通过分离处理图像的高频和低频信息,高效处理图像特征

本文记录的是利用改进检测模型,针对目标检测中面临的多尺度特征融合效率与长距离依赖建模难题,HiLo注意力模块的引入旨在通过频率解耦策略优化高分辨率特征处理,将高频细节(如目标边缘)与低频语义(如场景结构)分离建模,提升目标检测精度。Fast Vision Transformers with HiLo AttentionHiLo注意力模块的提出源于对传统自注意力机制局限性的反思。传统多头自注意力(MSA)在处理高分辨率图像时存在以下问题:HiLo将注意力模块分为高频(Hi-Fi)和低频(Lo-Fi)两个分支,

Limiiiing的博客 817

hwasan实例分析踩内存之七:CamX进程chifeature2base怪异的Cause: use-after-free

摘要:本文分析了高通camx进程中的指针异常crash问题,通过构建hwasan版本确认存在内存踩踏现象。日志显示为"use-after-free"类型错误,具体为线程T175672在已释放内存区域执行写入操作。堆栈分析表明ChiFeature2Base::PipelineDestroyCb()函数访问了已被ChiFeature2Base::DestroyFeatureData()释放的pPipelineData对象。该问题源于多线程环境下内存管理不同步,导致释放后仍被引用。解决方案通过

1076

gdb 基本命令

当然,以下是常用。

JC的博客 493

深度学习工具包 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")

GDB 基本调试命令

转自  一、gdb调试基本知识 a.调试器指示的是将要执行的代码行 b.只有在编译时拥有调试符号(-g)的程序才能在调试时看到源码 c.同一行上有多个断点时,gdb仅中断在断点号最小的那个断点上 d.断点可以设置在同一程序的不同文件中 e.在任何给定时间,gdb只有一个焦点,即当前“活动”的文件 f.源文件改变后,断点发生移动,带式断点属性的行号不变 二、GDB基本命令清单查询

zhanglifu081022的专栏 1102

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

GDB基本调试命令

内容概要: [1]GDB基本操作; [2]调试coredump; [3]GDB远程调试; [4]使用GDB的注意点; [5]GDB看不到源码 1. GDB基本操作 [root@WORK /]# ps -ef | grep -E 'fos_|p_|b_' --- 获取fos进程pid [root@WORK /]# ps -a [root@WORK /]# gdb attach <pid> (gdb) help --- 万能的help!!...

Hansen的博客 1122

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

GDB调试基本命令

GDB调试基本命令 首先最重要的一点:编译时要加 -g 选项,否则无法进行gdb调试(gcc -g file.c -o file) 一,run命令 (运行程序) 二,list命令 (显示源代码) 三,break 命令 (简写b,用于在程序中设置断点) 3.1 b file:n(行号) (在源文...

weixin_39917818的博客 446

gdb调试基本命令(非常详细)

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

Aiky哇 8743

GDB基本命令

开始 在编译C时,需要使用-g参数 gcc -g a.c 进入GDB gdb 可执行文件 基本命令 run 运行程序 简写为:r quit 退出 break 函数名/行数 打断点 简写为:b (gdb) break main list 查看源代码 info break 查看断点信息 (gdb) info break Num Type Disp Enb Address What 1 break

LIKEWWZ的博客 161

GDB调试的基本命令使用。

一.GDB基本命令 1.bt –查看各级函数调用及参数重点内容 2.frame (f)–选择栈帧 3.finish–继续运行直到函数结束 4.list(l)–列出代码,每次10行,l 10可以从第10行开始往下再显示代码 5.next–单步执行,但是不会进入函数 6.s–(step)详细的单步执行 7.i locals –显示值 8.p–(print)显示值,如p a 显示变量a的值

cdaren的博客 653

gdb调试基本命令小结

在debug阶段,gdb是个很强大的工具,今天大葱敏有幸为大家总结一下一些gdb的基本命令(其实是最基本的),希望能对看到这篇文章的你有所帮助。 1)进入gdb  gdb test   这里的test是要调试的程序,由gcc test.c -g -o test(C++对应用g++)生成。进入后提示符变为 (gdb) 。 2)查看源码  (gdb) l   源码会进行行号提示。而且后边单步

大葱敏的博客 2543

基本gdb命令

基本gdb命令: --------------------------------------------------------------------- 命令          简写         功能 --------------------------------------------------------------------- file                

sword_out的博客 396
上一篇: 数据结构的查找
下一篇: 排序
lq.kr
博客等级 码龄14年 9粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值