有eval功能吗?我读过“帮助”而我没找到
我想制作eval("gdb command")
因为我想使用这个方法创建我自己的grepping函数
我想制作eval($arg1)
答案 0 :(得分:1)
有一个eval
命令,但它并没有真正做到你想要的。它提供了一种有限的值替换形式的命令。
对于grep行的命令,我建议用Python编写。这样做比较容易。我们的想法是使用gdb.execute
将命令的输出捕获到一个字符串中,然后使用Python来搜索你喜欢的字符串。如果从Python完成,您可以完全控制如何解析命令行,如果您使用gdb define
命令则不然。
答案 1 :(得分:1)
奇怪的是,我今天早些时候为另一个question写了一个grep python gdb函数。这几个文件创建一个新命令,检查调用堆栈是否包含_malloc。对于其他字符串搜索和评估函数来说,这应该是一个非常好的开始。
这是gdb的脚本
# gdb script: pygdb-logg.gdb
# easier interface for pygdb-logg.py stuff
# from within gdb: (gdb) source -v pygdb-logg.gdb
# from cdmline: gdb -x pygdb-logg.gdb -se test.exe
# first, "include" the python file:
source -v pygdb-logg.py
# define shorthand for inMalloc():
define inMalloc
python inMalloc()
end
这是python文件:
#!/usr/bin/python
# gdb will 'recognize' this as python
# upon 'source pygdb-logg.py'
# however, from gdb functions still have
# to be called like:
# (gdb) python print logExecCapture("bt")
import sys
import gdb
import os
def logExecCapture(instr):
# /dev/shm - save file in RAM
ltxname="/dev/shm/c.log"
gdb.execute("set logging file "+ltxname) # lpfname
gdb.execute("set logging redirect on")
gdb.execute("set logging overwrite on")
gdb.execute("set logging on")
gdb.execute("bt")
gdb.execute("set logging off")
replyContents = open(ltxname, 'r').read() # read entire file
return replyContents
# in malloc?
def inMalloc():
isInMalloc = -1;
# as long as we don't find "Breakpoint" in report:
while isInMalloc == -1:
REP=logExecCapture("n")
#Look for calls that have '_malloc' in them
isInMalloc = REP.find("_malloc")
if(isInMalloc != -1):
# print ("Malloc:: ", isInMalloc, "\n", REP)
gdb.execute("set $inMalloc=1")
return True
else:
# print ("No Malloc:: ", isInMalloc, "\n", REP)
gdb.execute("set $inMalloc=0")
return False