开发者

How to get my program name in GDB when writting a "define" script?

I found it's very annoying to get the开发者_开发问答 program name when defining a GDB script. I can't find any corresponding "info" command, and we can't use argv[0] either, because of multi-process/thread and frame-choosing.

So, what should I do?


If you are using a recent gdb (7 and above) you can play around with the Python support which is quite extensive (and probably where you want to go when defining gdb-scripts in general). I'm no expert at it but for a test-program /tmp/xyz I could use:

(gdb) python print gdb.current_progspace().filename
/tmp/xyz

See http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html for more info on the Python support.

In "normal" gdb you could get the process name with "info proc" and "info target", but I guess you wanted it not just printed but being able to use it further in scripts? Don't know how to get the value out of the python runtime into a gdb variable other than the extremely ugly "using log files and sourcing it and hope for the best". This is how this could be done:

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

and in your own function doing:

define your-own-func
  set-program-name
  printf "The program name is %s\n", $programname
end

I would suggest "going all in" on the python support, and scrap gdb-scripting. I believe it is worth the effort.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜