我发现在定义GDB脚本时获取程序名称非常烦人。我找不到任何相应的“info”命令,我们也不能使用argv [0],因为多进程/线程和帧选择。
那么,我该怎么办?
答案 0 :(得分:2)
如果您正在使用最近的gdb(7及更高版本),那么您可以使用相当广泛的Python支持(并且可能在定义gdb脚本时通常需要去的地方)。我不是专家,但对于我可以使用的测试程序/ tmp / xyz:
(gdb) python print gdb.current_progspace().filename
/tmp/xyz
有关Python支持的更多信息,请参阅http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html。
在“普通”gdb中,您可以使用“info proc”和“info target”获取进程名称,但我想您不希望它只是打印但能够在脚本中进一步使用它吗?不知道如何将python运行时的值从gdb变量中获取,而不是非常丑陋的“使用日志文件并获取它并希望获得最佳效果”。这是如何做到的:
define set-program-name
set logging file tmp.gdb
set logging overwrite on
set logging redirect on
set logging on
python print "set $programname = \"%s\"" % gdb.current_progspace().filename
set logging off
set logging redirect off
set logging overwrite off
source tmp.gdb
end
并在你自己的函数中执行:
define your-own-func
set-program-name
printf "The program name is %s\n", $programname
end
我建议在python支持上“全力以赴”,并废弃gdb脚本。我相信这是值得的。