有时候输出信息太长,屏放不下,下面介绍两种将gdb的输出信息存到文件的方法。
方法一:适合临时向文件输出些信息的情况。
比如要用info functions输出所有函数,结果往往有一大坨,所以可以将之输出到文件。
(gdb) set logging file <file name>
(gdb) set logging on
(gdb) info functions
(gdb) set logging off
http://hellogcc.blogbus.com/logs/69799908.html
方法二:适合整个gdb会话期间都重定向输出的情况。
gdb |tee newfile
----------------------------------------------------------------------------------
反汇编函数
(gdb) p 'operator==(uint128 const&,uint128 const&)'
$1 = {bool (const uint128 &, const uint128 &)} 0x401040 <operator==(uint128 const&, uint128 const&)>
(gdb) disassemble $1
Dump of assembler code for function _ZeqRK7uint128S1_:
0x00401040 <_ZeqRK7uint128S1_+0>: push %ebp
... (elided)
0x00401066 <_ZeqRK7uint128S1_+38>: ret
End of assembler dump.
(gdb)
直接反汇编,反汇编不了,则用下面的方法
(gdb) info func PerformerHomeManager::updateChannelFace
All functions matching regular expression "PerformerHomeManager::updateChannelFace":
File PerformerHomeManager.cpp:
void PerformerHomeManager::updateChannelFace();
void PerformerHomeManager::updateChannelFace(unsigned long, char const*);
non-unique member `updateChannelFace' requires type instantiation
(gdb) p 'PerformerHomeManager::updateChannelFace()'
$3 = {void (PerformerHomeManager * const)} 0x555ef0 <PerformerHomeManager::updateChannelFace()>
(gdb) disassemble $3
Dump of assembler code for function _ZN20PerformerHomeManager17updateChannelFaceEv:
---------------------------------------------------------------------------
显示相关符号信息
show case-sensitive
此命令显示当前符号查找的大小写相关性的设置。
set case-sensitive on
set case-sensitive off
set case-sensitive auto
on参数指定大小写相关匹配,off参数指定大小写无关匹配。如果指定了auto,大小写相关将由此源代码语
言缺省的设置决定。除了Fortran,对于大部分语言缺省的都是大小写相关的,Fortran是大小写无关的匹配。
info address symbol
显示符号symbol数据在何处存储。对于寄存器变量,是说此变量在哪个寄存器里存储。对于非寄存器的本地变量,此命令打印此变
量对于堆栈帧的偏移。
info symbol addr
打印存储于地址addr上的符号名。如果在此地址上没有存储符号,GDB打印最近的符号和偏移量。
whatis [arg]
打印arg的数据类型,arg可以是表达式或数据类型。如果不带参数,打印$的数据类型,值历史里最近的值。
info types regexp
打印所有名字匹配正则表达式regexp(如果没有参数的话,打印程序里所有的类型)的的类型的简短介绍。
info sources
打印程序中所有有调试信息的源文件名,用两个列表打印:一个是其符号已经读过的,一个是在需要是将被度
的。
info functions regexp
打印所有名字包含匹配正则表达式regexp的函数的名字和数据类型。
info variables regexp
打印所有名字包含匹配正则表达式regexp的变量的名字和数据类型(除了本地变量)。
info classes regexp
打印程序里所有Objective-C的类,或者(带参数regexp)所有匹配正则表达式regexp的类。
info selectors regexp
显示程序里所有Objective-C选择器,或者(有正则表达式参数的话)所有匹配某个正则表达式的选择器。