【发布时间】:2016-08-21 21:37:57
【问题描述】:
有评估功能吗?我已经阅读了“帮助”,但没有找到
我想做eval("gdb command")
因为我想使用这种方法创建自己的 grepping 函数
我想做eval($arg1)
【问题讨论】:
标签: gdb
有评估功能吗?我已经阅读了“帮助”,但没有找到
我想做eval("gdb command")
因为我想使用这种方法创建自己的 grepping 函数
我想做eval($arg1)
【问题讨论】:
标签: gdb
有一个eval 命令,但它并没有真正做到你想要的。它提供了一种将值替换为命令的有限形式。
对于类似于 grep 的命令,我建议用 Python 编写它。这将相对容易做到。这个想法是使用gdb.execute 将命令的输出捕获到一个字符串中,然后使用 Python 来搜索你喜欢的字符串。如果从 Python 完成,您可以完全控制如何解析命令行,如果您使用 gdb define 命令,则情况并非如此。
【讨论】:
奇怪的是,我今天早些时候为另一个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
【讨论】: