GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed.
GDB, GNU项目调试器,允许你看到在另一个程序执行时“内部”发生了什么——或者另一个程序在崩溃时正在做什么。

要想使用gdb进行源码级别的调试,需要用gcc编译(不是链接)时候加上-g选项。这样调试生成的程序才能够显示源码,否则只能进行汇编级别的调试。
通常进行编译时候不止加入-g,还会关闭编译器优化-O。另外,-Wall可以在编译时候发现一些问题,避免一些不必要的bug。
首先通过gdb 程序名来启动gdb去调试该程序。
| 命令 | 说明 | 示例 |
|---|---|---|
| 基本 | ||
| q/quit | 退出 | |
| help | 帮助,可具体指定哪个命令 | help info |
| set args 参数... | 给程序设置参数 | set args 1 2 |
| show args | 显示当前 | |
| start | 程序运行并停在第一行 | |
| r/run | 程序运行并到断点才停止 | |
| c/continue | 继续运行直到下一个断点 | |
| n/next | 执行一条一句(不会进入函数体) | |
| s/step | 执行一条一句(进入函数体) | |
| until | 继续运行至退出循环或遇到下一个断点 | |
| finish | 继续运行至跳出函数体或遇到下一个断点 | |
| 查看代码相关 | ||
| l/list | 显示当前文件代码 | |
| l 行号 | 显示指定行号前后文 | list 10 |
| l 函数名 | 显示指定函数 | list main |
| l 文件名:行号 | 显示指定文件代码 | list ot.cpp:1 |
| l 文件名:函数名 | 显示指定文件代码 | list ot.cpp:fun |
| show list/listsize | 显示list时候的行数 | |
| set list/listsize 行数 | 设置list时候显示的行数 | set list 20 |
| 断点 | ||
| b/break 行号 | 在当前文件指定行打断点 | b 10 |
| b 函数名 | 在当前文件指定函数打断点 | b fun |
| b 文件名:行号 | 在指定文件指定行打断点 | b ot.cpp:10 |
| b 文件名:函数名 | 在指定文件指定函数打断点 | b ot.cpp:fun |
| b 位置 if 条件 | 设置条件断点(一般用于循环位置) | b 23 if i==2 |
| i/info b | 查看断点信息 | |
| d/del/delete 断点编号 | 删除指定断点 | d 2 |
| dis/disable 断点编号 | 使指定断点无效 | dis 2 |
| ena/enable 断点编号 | 使指定断点生效 | ena 2 |
| 变量 | ||
| p/print 变量名 | 打印变量值 | p var |
| ptype 变量名 | 打印变量类型 | ptype var |
| set var 变量名=值 | 设置变量值 | set var i=6 |
| display 变量名 | 每次暂停自动打印变量的值 | display var |
| i/info display | 查看自动打印变量列表 | |
| undisplay 编号 | 取消自动打印 | undisplay 2 |
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现