我正在尝试设置一组要被gdb跳过的函数,例如:
skip myfunction
。但是,如果我将它们放在~/.gdbinit
而不是仅仅在终端gdb提示符中说,我收到错误:
找不到名为myfunction的函数。
忽略未来共享库加载的函数? (y或[n])[回答N;输入不是来自终端]
所以我需要GDB来获得Y
回答。我已经尝试了对suggested for breakpoints的评论中提出的this question和set confirm off
内容。但这些对skip
命令没有帮助。
如何在skip
脚本中设置.gdbinit
,回答关于未来库加载的Y
?
答案 0 :(得分:1)
此功能已在此处提出:
https://sourceware.org/ml/gdb-prs/2015-q2/msg00417.html https://sourceware.org/bugzilla/show_bug.cgi?id=18531
到目前为止,在这个问题上已经有6个月没有活动了。在编写本文时,该功能未包含在GDB 7.10中。
答案 1 :(得分:1)
您可以使用Python等待执行开始,这相当于pending on
:
import gdb
to_skip = []
def try_pending_skips(evt=None):
for skip in list(to_skip): # make a copy for safe remove
try:
# test if the function (aka symbol is defined)
symb, _ = gdb.lookup_symbol(skip)
if not symb:
continue
except gdb.error:
# no frame ?
continue
# yes, we can skip it
gdb.execute("skip {}".format(skip))
to_skip.remove(skip)
if not to_skip:
# no more functions to skip
try:
gdb.events.new_objfile.disconnect(try_pending_skips) # event fired when the binary is loaded
except ValueError:
pass # was not connected
class cmd_pending_skip(gdb.Command):
self = None
def __init__ (self):
gdb.Command.__init__(self, "pending_skip", gdb.COMMAND_OBSCURE)
def invoke (self, args, from_tty):
global to_skip
if not args:
if not to_skip:
print("No pending skip.")
else:
print("Pending skips:")
for skip in to_skip:
print("\t{}".format(skip))
return
new_skips = args.split()
to_skip += new_skips
for skip in new_skips:
print("Pending skip for function '{}' registered.".format(skip))
try:
gdb.events.new_objfile.disconnect(try_pending_skips)
except ValueError: pass # was not connected
# new_objfile event fired when the binary and libraries are loaded in memory
gdb.events.new_objfile.connect(try_pending_skips)
# try right away, just in case
try_pending_skips()
cmd_pending_skip()
将此代码保存到Python文件pending_skip.py
中(或python ... end
中的.gdbinit
包围),然后:
source pending_skip.py
pending_skip fct1
pending_skip fct2 fct3
pending_skip # to list pending skips
文档参考: