【发布时间】:2015-08-17 14:56:06
【问题描述】:
我使用 Python API 为 GDB 定义了一个便利函数,
import gdb
verbose = True
class HCall(gdb.Function):
def __init__(self, funcname):
super(HCall,self).__init__(funcname)
def log_call(cmd):
if verbose:
print(cmd)
try:
gdb.execute(cmd)
except Exception, e:
print (e)
import traceback
# traceback.print_stack()
traceback.format_exc()
class NewCVar(HCall):
""" allocates a c variable in heap """
def __init__(self):
super(NewCVar,self).__init__("newcvar")
def invoke(self, name, oftype):
cmd = "call gdb.execute(set $" + name + " = malloc(sizeof(" + oftype + "))"
log_call(cmd)
return "$" + name
NewCVar()
我可以使用“source usefunction.py”加载此文件,并使用“function newcvar”打印帮助文本。尽管如此,GDB 并不知道 $newcvar,正如我所料 (https://sourceware.org/gdb/onlinedocs/gdb/Functions-In-Python.html)。
有人知道我做错了什么吗?
提前致谢!
【问题讨论】:
-
您最终拥有
gdb.execute("call gdb.execute(set $" + name + " = malloc(sizeof(" + oftype + "))")。但是 gdbcall命令用于调用正在调试的目标中的函数。运行时 gdb 调试的目标是什么? -
一个标准的 C 程序。出于某种原因,我需要分配变量并在它们上调用函数。这就是 NewCVar 的动机。但这不是问题。当我尝试调用它时,GDB 说,它不知道 $newcvar,尽管命令函数知道它。
标签: python linux debugging gdb