在编写“define”脚本时如何在GDB中获取程序名?

时间:2011-06-05 02:07:10

标签: gdb

我发现在定义GDB脚本时获取程序名称非常烦人。我找不到任何相应的“info”命令,我们也不能使用argv [0],因为多进程/线程和帧选择。

那么,我该怎么办?

1 个答案:

答案 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脚本。我相信这是值得的。