首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么gdb不能显示调试信息?

gdb是一款功能强大的调试工具,但在某些情况下可能无法显示调试信息。以下是一些可能的原因:

  1. 编译时未开启调试信息:在编译源代码时,需要使用调试选项来生成包含调试信息的可执行文件。如果没有使用适当的编译选项(如-g),则可执行文件中将没有调试信息可供gdb显示。
  2. 优化级别过高:在进行代码优化时,编译器可能会对代码进行重排、删除无用代码等操作,这可能导致gdb无法正确显示调试信息。可以尝试降低优化级别(如-O0)来解决该问题。
  3. 可执行文件被剥离调试信息:有些工具(如strip)可以将可执行文件中的调试信息移除,以减小文件大小。如果使用了这些工具,gdb将无法显示调试信息。可以尝试使用不剥离调试信息的选项来编译可执行文件。
  4. 调试信息未正确加载:在使用gdb调试可执行文件时,gdb需要正确加载调试信息才能显示。如果可执行文件与调试信息文件不匹配或未正确加载,gdb将无法显示调试信息。可以尝试重新编译或重新加载调试信息文件。

总结起来,gdb无法显示调试信息可能是由于编译时未开启调试选项、优化级别过高、可执行文件被剥离调试信息或调试信息未正确加载等原因导致的。为了解决该问题,可以确保在编译时开启调试选项,降低优化级别,避免剥离调试信息,并确保调试信息正确加载。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么行程码不能显示到县级,工信部回应

近日,有网友向工信部留言建议能否考虑将通信行程码显示的行程精确到县级。对此,工信部再次在答复中强调,因受技术原理所限,无法精确到县级。...工信部官网“部长信箱”页面显示,该网友5月10日留言称,“行程码目前只显示地级市,对地级市内防控工作精准化带来不便,也不利于民众出行。...强烈要求三大运营商按区县对基站分组,信通院将行程码显示行程具体到县级。”...实际自今年1月开始,已有多名网友向工信部建议行程码显示的地址信息能否更加精确,在社交平台上也能看到此类建议。 此前就有网友在人民网留言板写道,“近期疫情频发,各地都要求绿码通行。

1.9K20

C#.NET 调试的时候显示自定义的调试信息(DebuggerDisplay 和 DebuggerTypeProxy)

默认显示的是对象 ToString() 方法调用之后返回的字符串,不过如果 ToString() 已经被占作它用,或者我们只是希望在调试的时候得到我们最希望关心的信息,则需要使用 .NET 中调试器相关的特性...本文介绍使用 DebuggerDisplayAttribute 和 DebuggerTypeProxyAttribute 来自定义调试信息显示。(同时隐藏我们在背后做的这些见不得人的事儿。)...我们使用 DebuggerBrowsable 特性可以关闭某个属性或者字段在调试器中的显示。...然而,上面展开 _optionArgs 字段的时候,依然需要展开 4 层才能看到我们的所有信息,所以我们使用 DebuggerTypeProxyAttribute 来优化调试器实例内部的视图。...但是,我们在 Options 上标记 DebuggerBrowsableState.RootHidden: 如果这是一个集合,那么这个集合将直接显示调试视图的上一级视图中; 如果这是一个普通对象,那么这个对象的各个属性字段将合并到上一级视图中显示

1.2K20

EasyCVR启动后不显示版本号及服务信息调试及优化

TSINGSEE青犀视频开发视频流媒体软件至今,很多产品都经过了多次的更新,每次正式上线前我们都会在内部做几次全面测试,包括系统运行、视频播放、不同协议的对接、第三方平台的对接、前端显示等方面。...在我们最新的测试中,我们发现EasyCVR启动后不显示版本号及服务信息: image.png 排查发现内核返回的时间有时间小数点后为两位,或者三位导致的。...image.png 调试后再次进行预览: image.png EasyCVR的功能正在逐步完善,目前作为视频智能分析平台,在人脸识别和车牌识别领域也有了比较完善的研发成果,并且对于新需求的展现也在不断推进研发当中

28820

Git和gdb的使用

但是服务器告诉我不能调试,然后反馈了一堆信息。前面刚说gdb是Linux下的调试器,为什么这里又不能调试? 这是因为程序有两个版本,分别是release和debug。...所以就不用在程序中加入调试信息(而且删掉调试信息会让程序更轻量化),所以发布版都是release版。 Linux中默认是release版本,所以这里说no debugging symbols。...调试,那么在生成可执行文件的时候就要加上-g选项 前面提到,debug版本要加入调试信息而release就不用,这个最直观的表现就在于文件大小,加入了调试信息的debug肯定是要比没有调试信息的release...版本要大 b.显示 显示代码(l) 当我们使用gdb开始调试后,刚开始屏幕上并没有我的代码,当我输入l以后才会显示我的代码 默认是先显示十行,如果要继续往下显示就摁回车 也可以指定显示:...显示内部格式信息(readelf -s) |是管道,同时使用多个指令的时候就需要使用管道 c.断点 根据我们在Windows下使用编译器调试的经验来说,要调试一个程序打断点是必不可少的。

37200

gdb 调试笔记

|'all'] tcatch event 捕捉一次catch (6)dprinf 遇到断点是打印信息 set dprintf‐style gdb/call/agent 设置用哪里的打印函数打印信息 set...设置跟踪点 或者改变跟踪点命令直到下个tstart命令才会生效;因此,不能在跟踪会话过程中改变跟踪 点的属性。...checkpoint‐id:删除某个checkpoint 值得注意的是 保存快照的进程ID和之前不同 已经写入文件或者关闭设备这些操作不能撤回到原先的状态 恢复到快照后,会将快照覆盖,所以如果还想再调试一次...,是否在运行,程序名,为什么停止 info stack 查看栈信息 info r 查看寄存器 八、调试特定场景 (1)调试多线程 info threads thread 2 切换到线程2 thread...显示所有参数 set print frame‐arguments all (3)调试信号 info handle 查看各种信号的设置,设置包括如下: print 对信号量进行通知 noprint 对信号量不打印信息

86400

linux下的程序调试方法汇总

对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。...它不能检测出静态分配的数组的访问越界问题。 为了使用它,首先请下载并安装在你的系统上。可以使用操作系统上的包管理器来安装。 使用命令行安装需要解压缩和解包下载的文件。...valgrind显示堆溢出和内存泄漏的输出 正如我们在上面看到的消息,我们正在试图访问函数f未分配的内存以及分配尚未释放的内存。 5. GDB GDB是来自自由软件基金会的调试器。...如果你还没有安装GDB,可以在这里下载:GDB官方网站。 编译程序: 为了用GDB调试程序,必须使用gcc的'-g'选项进行编译。这将以操作系统的本地格式产生调试信息GDB利用这些信息来工作。...show args'将显示传递给程序的参数。 检查堆栈: 每当程序停止,任何人想明白的第一件事就是它为什么停止,以及怎么停在那里的。该信息被称为反向跟踪。

3.9K21

gdb调试功能从零到会(Linux详解)

---- 前言  gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。...在Linux环境软件开发中,gdb 是主要的调试工具,用来调试 C 和 C++ 程序。 1.安装gdb 直接在命令行输入:sudo yum install -y gdb 即可直接安装成功。...哪为什么会这样呢?原因很简单,因为gdb在linux中默认是以release版(一般软件进行发布,用户体验模式)的方式来进行发布的,不可以被调试!...所以我们要把它改成debug方式(包含调试信息)发布。 3.改成debug方式发布。...如下图所示: 4.gdb功能简介 接下来就可以进行gdb使用了,简单介绍其几个功能如下:      l:显示代码(l+数字:可以从你输入的数字开始显示,但会出现和其相关的上下文) (gdb)

65350

GDB调试学习

gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。...i/info:显示各类信息。 q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。...如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。 cd dir:运行GDB,使用dir作为gdb的工作目录。...rwatch:指定一个变量,如果这个变量被读,则暂停程序运行,在调试器中显示信息,并等待下一个命令调试。 Ctrl + c:在当前位置停止执行正在执行的程序,断点在当前行。...bt:显示程序堆栈信息。 l:l相当于list,从第一行开始列出源码。

1.4K20

【Linux】调试工具gdb的使用

gdb的启动与退出(q) 我们在生成debug的可执行程序后,直接输入指令gdb 可执行程序名 就可以进入调试状态,对该程序进行调试,输入q(或者quit、ctrl d)进行退出gdb。...打断点 r: 运行程序,无断点的话,直接运行到结束,有断点运行到最近的断点处停止(r不能在断点间移动,即运行到最近断点处后,再次输入r,则会重新再次运行) b(break) 行号 :在某一行设置断点...n: 逐过程调试(不会进入函数) s: 逐语句调试(会进入函数) 监视窗口(查看变量信息)(p) 这里我用换一个简单的代码,来方便我们进行观察。...不过这样有些傻傻的,就是我们每次查看变量,还得需要输入指令,太麻烦了,此时我们便可以使用指令display 变量:查看变量信息,并常显示。当然,使用undisplay 编号 即可取消常显示。...p 变量 :查看变量信息 display 变量 :常显示变量信息 undisplay 变量编号 :取消常显示 调用堆栈查看(bt) 我们知道,我们在进入main函数之前,main函数的函数栈帧是已经创建好了的

3.3K30

段错误?打的就是段错误!!

接下来有一步可走可不走的:可以使用命令 file core.4377(我测试的号码是这个) ,将core.4377这个文件的具体信息显示出来,命令最后会显示这个core文件是通过哪个文件产生的。...最后一步:gdb调试。这个执行文件叫dcw,是我的。gdb dcw core.4377,就会看到如下: ? 在最后,它会告诉你,在那个函数、那个地址出了问题。...注意:调段错误,编译的时候一定要加入-g选项,要不然在最后显示错误的时候只会显示错的地址,而不会显示错误的具体信息 最后退出gdb调试:q,回车。...包括数组访问越界,或在使用一些写内存的函数时,长度指定不正确或者这些函数本身不能指定长度,典型的函数有strcpy(strncpy),sprintf(snprint)等等。...这类问题也是为什么我的程序在其他平台跑得好好的,为什么一移植到这个平台就段错误了。

3.6K20

Linux之gdb的使用

(Linux和windows)其实,在调试思路上是一样的,在调试的操作方式上一定不一样。 因此,在学习Linux的gdb调试时,一定要抓住我们的调试思路去学习。...因此,本章着重解析的是操作方法,不是思路: 首先我们先写好测试用的代码:  并且将代码写入makefile中  接着开始调试调试工具:gdb 使用gdb+需要调试的代码文件来开启调试模式: 但此时这里显示的是没有可调试的地方...:  因为在默认情况下,gdb无法对程序进行调试。...这是为什么?原因很简单 程序分为debug版本和release版本。只要debug版本才能进行调试。 在Linux中,用gcc/g++生成的软件程序是release版本!...总结一下: 1.在调试之前,我们在代码编译的时候,加上-g,使之变成debug文件 2.用l 0,然后不断回车,查看完整代码信息,也能l {行号},查看所需要的代码信息 3.打断点:b {行号}

2.1K20
领券