Как получить имя моей программы в GDB при написании сценария «define»? - PullRequest
3 голосов
/ 05 июня 2011

Мне было очень неприятно получать имя программы при определении скрипта GDB. Я не могу найти соответствующую команду "info", и мы не можем использовать argv [0] из-за многопроцессорности / потока и выбора фрейма.

Итак, что мне делать?

1 Ответ

2 голосов
/ 05 июня 2011

Если вы используете недавний gdb (7 и выше), вы можете поиграть с поддержкой Python, которая довольно обширна (и, вероятно, куда вы хотите пойти при определении gdb-скриптов в целом). Я не эксперт в этом, но для тестовой программы / tmp / xyz я мог бы использовать:

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

См. http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html для получения дополнительной информации о поддержке Python.

В "обычном" 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-scripting. Я считаю, что это стоит усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...