gdb(三)查看源代码和栈信息

系统程序员成长计划-像机器一样思考(二) 谁在call我-backtrace的实现原理显示函数调用关系(backtrace/callstack)是调试器必备的功能之一,比如在gdb里,用bt命令就可以查看backtrace。在程序崩溃的时候,函数调用关系有助于快速定位问题的根源,了解它的实现原理,可以扩充自己的知识面,在没有调试器的情况下,也能实现自己backtrace。更重要的是,分析backtrace的实现原理很有意思。现在我们一 阅读详情

一 查看源代码:

(1)list命令打印程序源代码:

*list <linenum>:显示程序第linenum行周围的源程序。

*list <function>:显示函数名为function的函数的源代码。

*list:显示当前行后面的源程序。

*list +:显示当前行后面的源程序。

*list -:显示当前行前面的源程序。

*list <first> <last>:显示从first到last行之间的源代码。

*list    ,<last>:显示当前行到last行之间的源代码。

*list <first>,:显示first到当前行的源代码。

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

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

*list <+/-offset>:当前行的正负偏移量。


(2)搜索源代码:

*forward-search <regexp>或search <regexp>:向下搜索匹配正则表达式的语句。

*reverse-search <regexp>:向前搜索匹配正则表达式的语句。


(3)指定源文件的路径:

*directory <dirname...>:加入一个源文件路径到当前路径前面。

*show directories:显示定义的源文件搜索路径。

*directory:清除所有自定义的源文件搜索路径信息。


(4)源代码的内存:

*info line后面跟:"行号","文件名:行号","函数名","文件名:函数名"。打印出所指定源代码在运行时的内存地址。

如:info line func

*disassemble:查看源代码的当前执行的机器码。

如:disassemble func。


二 查看栈信息:

(1)backtrace或bt(简写):打印当前函数的调用栈的所有信息。

*如下图:


函数的调用信息:main->print2->print1。


*backtrace <n>:打印栈顶上n层的栈消息。

*backtrace <-n>:打印栈底下n层的栈消息。


(2)frame或f:查看栈上某一层的消息(包括打印当前栈层消息)。

*frame <n>:n是一个从0开始的整数,是栈中的层编号,不打n,显示当前栈层。

*up <n>:表示向栈上面移动n层的,可以不打n,表示向上移动一层。

*down <n>:表示向栈下面移动n层的,可以不打n,表示向下移动一层。

*info frame:打印更为详细的当前栈层的消息。


(3)打印参数、变量和异常:

*info args:打印当前函数的参数名和其值。

*info locals:打印当前函数中所有局部变量以及其值。

*info catch:打印当前函数中的异常处理消息。








GDB基础知识之查看源码05 GDB调试时,需要结合源码分析问题和堆栈,如何在GDB中查看源码,本文将给出方法。 阅读详情

相关推荐

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5862

GDB调试程序6--查看源程序

查看源程序一、显示源代码    GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后, GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。    list         显示程序第linenum行的周围的源程序。    list         显示函数名为function的函数的源程序。    list        显示当前行后面的源程序。

阳光岛主 1万+

利用按键精灵实现批量截图与智能命名的高效工作流

本文详细介绍了如何利用按键精灵软件构建高效的批量截图与智能命名自动化工作流。通过基础脚本编写、循环逻辑实现及高级命名策略,解决手动操作耗时易错的问题,帮助用户实现一键自动截图、智能保存与文件重命名,大幅提升软件测试、教程制作及数据报告等场景的工作效率。

weixin_29268267的博客 569

【GDB】GDB动态打印不修改源码printf|打印类Class的成员|定义变量

GDB动态打印命令dprintf来实现print消息的输出, dprintf原理 dprintf命令会设置一个特殊的断点,这可以通过info break查看,dprintf设置了类型为dprintf的特殊断点,当程序执行到该断点时,GDB将按照template和expression打印消息,打印完成后继续执行程序。这个过程非常短暂(和仿真器的速度有关),人是感觉不出程序停顿的,所以看起来就跟是目标程序在打印消息一样。 在指定行打印 dprintf perf_msgr_client.cc:13..

我的笔记本 1735

在Modelsim中手动添加仿真库

缘由:在使用rom ip核的时候发现仿真需要altera_mf库的支持,而我的ModelSim没有这个库,所以想写一篇手动添加仿真库的文章方便自己以后使用:首先新建一个库,名字叫做altera_mf:然后编译对应的库文件:这里altera_mf.v文件是在quartus安装路径下quartus\eda\sim_lib文件夹下,点击编译后退出:最后在modelsim->example文件夹下可以找到编译好的库文件:

欢迎一起交流问题! 3402

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

GDB学习笔记

最近频繁使用Ubuntu进行开发,编译出错很麻烦,特意学习了gdb进行调试工作,记录一下学习笔记,方便后面回顾

m0_47492055的博客 2143

Camera metadata

Camera metadata

weixin_42136255的博客 2529

gdb调试(四)函数调用栈之Backtraces

通过产看栈信息,我们可以了解栈内帧的编号或地址,通过选择帧我们可以移动到指定的帧内去产看信息。 1、查看栈信息 产看函数调用栈的几个函数 bt     显示所有的函数调用栈帧的信息,每个帧一行。 bt n     显示栈定的n个帧信息。 bt -n     显示栈底的n个帧信息。 bt full     显示栈中所有帧的完全信息如:函数参数,本地变量

心中天堂的专栏 2万+

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1909

从生成到检测:全面解析Deepfake技术的演进与对抗策略

本文全面解析了Deepfake技术的演进与对抗策略,从GAN生成技术到先进的检测手段,探讨了其在娱乐与安全领域的双重影响。文章详细介绍了Deepfake的核心原理、技术迭代关键节点以及最新的检测方法,揭示了AI生成与识别的激烈博弈。同时,展望了量子计算和生物特征认证在未来攻防战中的潜在应用。

jenkins8butler的博客 255

GDB使用技巧(3)——查看栈信息

查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的GDB命令: backtrace bt 打印当前的函数调用栈的所有信息。如: (gdb) bt #0func (n=250) at tst.c:6 #10x08048524 in main (argc=1, ar...

huabiaochen的博客 1万+

基于STM32开发板的USB MIDI键盘实现

在本文中,我们介绍了如何使用STM32开发板和相应的软件工具来实现USB MIDI键盘。通过配置STM32CubeMX和编写相应的源代码,我们能够将STM32开发板转换为一个功能齐全的USB MIDI设备。我们将使用STM32开发板和相应的软件工具来实现这一功能,并提供相应的源代码供参考。此时,您应该可以使用STM32开发板作为USB MIDI键盘,并在按键按下时听到相应的音符。在STM32CubeMX中,选择适当的STM32型号,并启动一个新的项目。然后,将生成的可执行文件烧录到STM32开发板中。

2301_79326616的博客 1589

使用gdb 查看coredump堆栈信息

简介 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。 调试的话输入: gdb filename core filename就是产生core文件的可执行文件,core就是产生的dump文件 查看栈信息 ————— 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序 调用了一...

kc58236582的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c/c++|gdb 单点调试 | 多点调试|查看栈中信息|具体变量

#断点调试 #gdb #单点 #多点 #栈中信息

ttxiaoxiaobai的博客 1362

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux中gdb 查看core堆栈信息

本文转载自:http://blog.youkuaiyun.com/suxinpingtao51/article/details/12072559 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。 调试的话输入: gdb filename core filename就是产生core文件的可执行文件,croe

林中小屋 2465

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

GDB查看堆栈变量

查看栈信息 ————— 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的GDB命令:     backtrace      bt          打印当前的函数调用栈的所有信息。如:  

1万+

Linux 如何使用gdb 查看core堆栈信息

core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。 调试的话输入: gdb filename core   filename就是产生core文件的可执行文件,core就是产生的dump文件 查看栈信息 ————— 当程序被停住了,你需要做的第一件事就是查看

1万+

GDB数据查看

https://www.cnblogs.com/TianFang/archive/2013/01/21/2869474.html 查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的。这个一般是通过查看调用栈信息来看的。在gdb中,查看调用栈的命令是backtrace,可以简写为bt。 (gdb) bt #0 pop () at stack.c:10 ...

zhp搁浅的博客 4178

Linux中用gdb 查看代码堆栈的信息

Linux中用gdb 查看代码堆栈的信息

weixin_44869026的博客 6193

【gdb&core】Linux中gdb 查看core堆栈信息1

【GDB】GDB调试总目录_bandaoyu的笔记-优快云博客【GDB】GDB 调试多线程和多进程总结报错记录(gdb) b mps_guide_db.c:1699No source file named mps_guide_db.c.可能是因为调用了动态库,要打断点的文件是动态库的可以通过 以下方式得到解决:(gdb) set breakpoi...

小鱼菜鸟的博客 1171

如何在GDB中关联源代码

原文:How to point GDB to your sources 翻译:雁惊寒 如果你手头上有一个你自己或者别人开发的程序,但它有一些bug。或者你只是想知道这个程序是如何工作的。怎么办呢?你需要一个调试工具。现在很少有人会直接对着汇编指令进行调试,通常情况下,大家都希望能对照着源代码进行调试。但是,你调试使用的主机,一般来说并不是构建程序的那台,因此你会看到如下这个令人沮丧的消...

博客 3173
上一篇: gdb(二)暂停或恢复程序的运行
下一篇: gdb(四)查看运行时数据和更改调试程序的执行路线和变量值等
first_wolf
博客等级 码龄14年 43粉丝 472原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值