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

gdb -打印宏名而不是值

gdb是一款功能强大的调试器,它可以用于调试各种编程语言的程序。在调试过程中,有时我们希望打印宏的名称而不是它的值,以便更好地理解程序的执行流程和宏的使用情况。

要在gdb中打印宏名而不是值,可以使用以下步骤:

  1. 首先,确保程序是以调试模式编译的,即在编译时需要添加调试信息的选项,例如使用gcc编译时需要添加"-g"选项。
  2. 启动gdb调试器,可以通过在命令行中输入"gdb <可执行文件名>"来启动。
  3. 在gdb的命令行中,可以使用"break <行号>"或者"break <函数名>"设置断点,以便在程序执行到指定位置时停下来。
  4. 运行程序,可以使用"gdb> run"或者"gdb> r"命令来运行程序。
  5. 当程序停在断点处时,可以使用"gdb> print <宏名>"命令来打印宏的名称。

注意:在打印宏名时,需要确保宏已经被定义和展开,否则可能无法正确打印。

以上是关于在gdb中打印宏名而不是值的基本步骤。对于更复杂的调试需求,可以参考gdb的官方文档或者其他相关资料进行学习和探索。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于腾讯云的产品和服务信息。

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

相关·内容

为什么是AUC不是GSEA来挑选转录因子呢

首先批量计算AUC 如果是单细胞转录组数据里面,每个单细胞都是有一个geneLists,那么就是成千上万个这样的calcAUC分析,非常耗费计算资源和时间,就需要考虑并行处理,我们这里暂时不需要,所以直接...基因集的转录因子富集分析 motifs_AUC <- calcAUC(geneLists, motifRankings, nCores=1) motifs_AUC 可以看到是 24453个motifs的AUC都被计算了..., border="darkred") nes3 <- (3*sd(auc)) + mean(auc) abline(v=nes3, col="red") 可以看到 24453个motifs的AUC看起来满足正态分布...GSEA分析一文就够(单机版+R语言版) GSEA的统计学原理试讲 GSVA或者GSEA各种算法都是可以自定义基因集的 但实际上,绝大部分读者并没有去细看这个统计学原理,也不需要知道gsea分析的nes如何计算...不理解原理并不影响大家使用,知道这个概念,知道如何根据AUC去判断结果就好。

1.1K20

GDB高级技巧

1) 查看 默认情况下,在GDB中是不能查看及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看使用命令...p,这和查看变量的的方法相同,如果想查看的定义,使用“macro expand”命令即可 2) 如果执行一连串命令?...这个借助命令“source”即可,“source”的参数为一个存有一串命令的文件 3) 如何同时给多个函数打断点?...就会打印出“break at main() function” 5) 自定义命令 除了在.gdbinit文件自定义命令外,还可以直接在GDB运行环境定义命令,语法相同 6) 定义命令钩子...,表示fork之后跟踪子进程,父进程不受影响 set follow-fork-mode parent 表示fork之后继续跟踪父进程,子进程则不受影响,同样可以进入gdb后,执行“set follow-fork-mode

1.4K10

gdb基础命令和常用操作补充

设置观察点 watch       expr 变化时,停止程序 rwatch      expr 被读时,停止程序 awatch      expr 被读或被写时...在gdb中表示寄存器时前面要加个$,例如p $esp可以打印esp寄存器的,如esp寄存器的是0xbff1c3f4,所以x/20 $esp命令查看内存中从0xbff1c3f4地址开始的20个32位数...在GDB下,我们无法print定义,因为是预编译的。但是我们还是有办法来调试,这个需要GCC的配合。在GCC编译程序的时候,加上-ggdb3参数,这样,你就可以调试了。...另外,你可以使用下述的GDB调试命令 来查看相关的。 info macro – 你可以查看这个在哪些文件里被引用了,以及定义是什么样的。...如果要打印一个序列化过的结构体,这个序列太长的话,往往会被gdb省略掉,如: gdb>p string "xxxx",…"" //会有省略号出现,无法看到完整的字符串 此时可以设置: gdb>set

2.3K00

gdb 调试笔记

|'all'] tcatch event 捕捉一次catch (6)dprinf 遇到断点是打印信息 set dprintf‐style gdb/call/agent 设置用哪里的打印函数打印信息 set...skip file [filename] 始终不进入指定文件 until 3 继续执行直到命中断点3 finish 继续执行直到当前函数返回 set print finish on 继续执行到函数后会打印返回...call func 执行func函数并打印返回 return result 强制返回,返回为result 六、实用操作 gdb 重放操作 repeat (1)启动参数 gdb ‐n :可以不加载任何...展开 macro exp expression 例:macro exp __is_constexpr(1) 展开一次 macro exp1 expression (8)在gdb中编译和注入代码 七...addr 查找地址对应的symbol,如果找不到,会返回最近的symbol+偏移 directory/dir dirname 设置符号表搜索路径 info program 显示程序状态,是否在运行,程序

86600

linux与g++基本知识「建议收藏」

yum仓库的产生,就是为了解决这个问题,它最大的特点就是为了帮助linux用户降低软件安装难度。...# 将test.i文件生成汇编文件 生成.s文件 g++ -S test.i -o test.s 汇编Assembling # 将汇编代码转换为机器码 #缺省时 g++建立的目标代码文件有一个.o扩展...来指定 上面我们提到的-cflags参数就是我们用来生成-I参数的 g++ -I/myinclude test.cpp -Wall 打印警告信息 # 打印警告信息 g++ -Wall test.cpp...# 使用gcc/g++编译的时候定义 #常用场景 # -DDEBUG 定义DEBUG 可能文件中又DEBUG部分的相关信息 用个DDEBUG来选择开去或关闭DEBUG #如 1....finish #结束当前函数 回到原函数 continue(c) #跳到下一个断点 print(p) #打印及地址 quit(q) #退出gdb break num(b num) #在第

1.2K50

Linux基础——Linux开发工具(中)_gccg++

可以发现,我们写的代码明明只有几行,但是在test.i中,却多出几百行代码,而这些代码就是预处理阶段展开的头文件,去注释,替换,条件编译等操作而出现的。...简而言之就是:将C语言翻译为汇编代码 我们直接用指令查看一下: 指令:gcc -S test.i -o test.s -S选项来进行查看,该选项只进行编译不进行汇编,生成汇编代码, 生成....我们想进入gdb模式,我们可以: 指令:gdb 文件 我们想退出gdb模式,我们可以: 指令:ctrl + d 或 quit 下面给大家介绍一下常用的gdb指令: 调试: r或run:...x 显示: list/l n:显示从第n行开始的源代码,接着上次的位置往下列,每次列10行 list/l 函数名:列出某个函数的源代码 print/p 变量:打印变量的 print/p 表达式...:打印表达式的,通过表达式可以修改变量的 display 变量:跟踪查看一个变量,每次停下来都显示它的 undisplay 编号:取消指定编号变量的常显示 info/i locals:查看当前栈帧当中局部变量的

5410

GDB调试指南-变量查看

例如,打印基本类型,数组,字符数组等直接使用p 变量即可: (gdb) p a $1 = 10 (gdb) p b $2 = {1, 2, 3, 5} (gdb) p c $3 = "hello,shouwang..." (gdb) 当然有时候,多个函数或者多个文件会有同一个变量,这个时候可以在前面加上文件或者函数名来区分: (gdb) p 'testGdb.h'::a $1 = 11 (gdb) p 'main...'::b $2 = {1, 2, 3, 5} (gdb) 这里所打印的a是我们定义在testGdb.h文件里的,b是main函数中的b。...打印指针指向内容 如果还是使用上面的方式打印指针指向的内容,那么打印出来的只是指针地址而已,例如: (gdb) p d $1 = (int *) 0x602010 (gdb) 如果想要打印指针指向的内容...,如果发现观察的不是我们预期的时候,就需要检查我们的代码了。

2.4K10

GDB实现原理和使用范例

为 True 时代表这是一个子程序/函数(subroutine) AT_type 属性描述这个函数返回的类型是什么 AT_external Bool, 这个函数是否为全局可访问 AT_sibling...-ggdb3或者-ggdb2可以生成额外的调试信息,比如定义等) -g 选项可以产生符合操作系统本地格式的调试信息(stabs、COFF、XCOFF ,或者 DWARF 2)。...*函数 , 然后退出gdb 举个比较实用的例子: 下面是非常有用的shell脚本用来查找指定函数,并在这些函数上设置断点,然后运行程序,在每次这些函数被调用的时候,打印出5层堆栈。程序结束,自动退出。...打印 p :打印某个变量 x/,比如说x/10xb :打印开始的10个地址,以十六进制的单字节输出。...断点 b :设置断点, b 在函数级别设置断点。

5K10

gdb调试容器和命令保存

一、gdb调试容器或者智能指针的内容 有时候我们需要debug一些core文件或者程序,但是如果遇到STL容器,p打印出的是一些红黑树或者原始的数据机构,这给我们调试带来不必要的麻烦。...gdb 内置了 Python 支持,因此可以轻松编写一个函数来打印出任何 stl 结构的内容。gcc 4.5 已经提供所需的 python 脚本,以使 gdb 智能地处理 stl 数据结构。...https://gist.github.com/skyscribe/3978082像这个脚本提供了一些打印容器的,或者这里:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views...-1.03.txt 有了这些,就可以打印出响应的容器 wget http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt cat dbinit_stl_views...在gdb调试的时候,使用source ~/.gdbinit加载这些操作。 如果你的gdb在运行当中,需要重启启用下,这些才生效。 阅读这些代码,也可以帮助你理解stl结构。

1.8K400

C++代码调试方式建议

但是有一点必须强调:程序是设计出来的,不是调试出来的。这是所有程序员必须牢记在心的一条准则。一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序。...代码调试方式的几点建议 2.1使用打印语句 这是最朴素,也是最直接的方法。程序的运行可以看成是一组变量(状态)不断变化的过程,这个过程就是数据处理的过程。...例如下面的红可以用来显示变量的,而且变量的名字会一同显示出来: #define PR(x) cout<<#x”=”<<x; 这是利用#对的参数进行字符串化的处理。...可以在IDE中设置断点、但不调试、产看变量的内存的、动态修改变量的以改变程序的执行路径等。每一种具体的调试工具,其调试命令和方法都有差异,使用时要参阅相应的文档(如MSDN等)。...利用gdb调试程序的段错误可以参考我的另一篇blog:Linux下使用gdb调试core文件。 3.总结 使用各种调试的手段或工具,其目的是尽早的发现已经存在于程序中的错误。

1.5K30

CC++代码调试的几点建议

但是有一点必须强调:程序是设计出来的,不是调试出来的。这是所有程序员必须牢记在心的一条准则。一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序。...代码调试的几点建议 2.1使用打印语句 这是最朴素,也是最直接的方法。程序的运行可以看成是一组变量(状态)不断变化的过程,这个过程就是数据处理的过程。...例如下面的红可以用来显示变量的,而且变量的名字会一同显示出来: #define PR(x) cout<<#x”=”<<x; 这是利用#对的参数进行字符串化的处理。...可以在IDE中设置断点、但不调试、产看变量的内存的、动态修改变量的以改变程序的执行路径等。每一种具体的调试工具,其调试命令和方法都有差异,使用时要参阅相应的文档(如MSDN等)。...利用gdb调试程序的段错误可以参考我的另一篇blog:Linux下使用gdb调试core文件。 3.总结 使用各种调试的手段或工具,其目的是尽早的发现已经存在于程序中的错误。

61110

后台开发:核心技术与应用实践 -- 编译与调试

比如#include、#define 等,主要处理规则如下所述: 将所有的 `#define~ 删除,并且展开所有的定义 还有 #undef,则将取消对某个的定义,使以后该串的出现不再被替换...,因为所有的已经被展开,并且包含的文件也已经被插入到.i文件中。...不过文件一旦进行 strip 操作后就不能恢复原样了,所以 strip 可以认为是一个“减肥”工具不是压缩工具。而且,被 strip 后的文件不包含调试信息。...调试 调试的方法一般有两种: 在程序中插入打印语句,优点是能够显示程序的动态过程,比较容易检查源程序的有关信息。...i和变量arr[i]的 输入"bt",查看函数堆拢 输入"finish"退出函数 可以使用 gdb 分析 coredump 文件 产生 coredump 文件的一些原因: 内存访问越界 多线程程序

73810

GDB调试入门,看这篇就够了

根据条件设置断点 假设程序某处发生崩溃,崩溃的原因怀疑是某个地方出现了非期望的,那么你就可以在这里断点观察,当出现该非法时,程序断住。...'::b $2 = {, , , } (gdb) 这里所打印的a是我们定义在testGdb.h文件里的,b是main函数中的b。...打印指针指向内容 如果还是使用上面的方式打印指针指向的内容,那么打印出来的只是指针地址而已,例如: (gdb) p d $1 = (int *) 0x602010 (gdb) 如果想要打印指针指向的内容...,需要解引用: (gdb) p *d $2 = (gdb) p *d@10 $3 = {, , , , , , , , , } (gdb) 从上面可以看到,仅仅使用*只能打印第一个,如果要打印多个...,如果发现观察的不是我们预期的时候,就需要检查我们的代码了。

7.3K62

Linux设备驱动程序(四)——调试技术

*buffer, dev_t dev); 这两个均将设备编号打印到给定的缓冲区,其唯一的区别是 print_dev_t 返回的是打印的字符数,format_dev_t 返回的是缓冲区,这样,它的返回可直接作为调用...典型的 gdb 调用如下所示: gdb /usr/src/linux/vmlinux /proc/kcore 第一个参数是未经压缩的内核 ELF 可执行文件的名字,不是 zlmage 或 bzlmage...**在 /proc 文件系统中执行 read 系统调用时,它会映射到一个用于数据生成不是数据读取的函数上;。在 gdb 的使用中可以通过标准 gdb 命令查看内核变量。...当从 gdb 打印数据时,内核仍在运行,不同数据项的会在不同时刻有所变化;然而,gdb为了优化对 core 文件的访向,会将已经读到的数据缓存起来。...kdb 还有许多其他功能,包括单步调试(根据指令,不是C源代码行),在数据访问中设置断点、反汇编代码、跟踪链表以及访问寄存器数据等等。

57341

学习GDB

continue 继续运行程序,可简写为c 9 查看运行时数据      print 打印变量、字符串、表达式等的,可简写为p      p count 打印count的 10 自动显示      ...相关的GDB命令是display。      display 变量      info display -- 查看display设置的自动显示的信息。      ...查看修改变量的      (gdb) ptype width -- 查看变量width的类型           type = double      (gdb) p width  -- 打印变量width...的           $4 = 13      你可以使用set var命令来告诉GDB,width不是GDB的参数,而是程序的变量,如:           (gdb) set var width...当程序停下来以后,      GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。默认打印10行,还是来看一看查看源代码的GDB命令吧。

1.4K80
领券