E.g.:
define mycmd
break $arg0
commands
print $arg0
end
end
mycmd myfunc
continue
Prints:
$1 = void
而不是预期的myfunc
, 因为$arg0
当命令被点击时被评估,并且由于它尚未被定义显示void
.
有没有办法将其传递给commands
?
我想我可以用Python轻松地做到这一点,但如果有一种更快的方法那就太酷了。但如果你已经准备好了Python,那么无论如何都可以粘贴它。
动机:自动化https://stackoverflow.com/a/5372742/895245 https://stackoverflow.com/a/5372742/895245,我想写的地方:
define break-stack
break $arg0
commands
tbreak $arg1
continue
end
end
break-stack ParentFunc ChildFunc
对我知道那个https://stackoverflow.com/a/20209911/895245 https://stackoverflow.com/a/20209911/895245提供Python解决方案。
GDB 7.11、Ubuntu 16.10。
我无法哄骗 gdbeval
评估多行命令,例如commands
,所以这是一个使用的解决方案shell
.
define break-stack
dont-repeat
break $arg0
shell { echo commands; echo tbreak $arg1; echo continue; echo end; } > /tmp/gdbtmp
source /tmp/gdbtmp
shell rm /tmp/gdbtmp
end
If your echo
接受-e
选项,它可以缩短为
define break-stack
dont-repeat
break $arg0
shell echo -e "commands\ntbreak $arg1\ncontinue\nend" > /tmp/gdbtmp
source /tmp/gdbtmp
shell rm /tmp/gdbtmp
end
您的具体任务 - 功能停止时b由函数调用a- 可以通过使用来完成$_caller_is
便利函数,包含在最新版本的 gdb 中。
define break-stack
break "$arg1" if $_caller_is("$arg0")
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)