Я запускаю программу, которая выполняет обработку файла.
Я хочу иметь возможность снабдить программу несколькими файлами, и, прикрепив к ней gdb, я хочу получить дамп памяти в определенный момент кода для каждого из файлов. Я хочу, чтобы дамп для каждого файла шел в файл с тем же именем файла, что и входной файл (возможно, после небольшого форматирования, скажем, добавив суффикс)
Итак, предположим, что у меня есть функция с именем HereIsTheFileName (char * filename) и другая функция с именем DumpThisMemoryRegion (void * startAddr, void * endAddr), я хочу сделать что-то вроде следующего:
Чтобы получить имя файла для переменной среды:
- break ЗдесьIsTheFileName
- команды 1
- set $ filename = malloc (strlen (filename) + 1)
- call memcpy ($ filename, filename, strlen (filename) + 1)
- конец
Затем, чтобы сбросить память в файл, который я сохранил ранее:
- break DumpThisMemoryRegion
- команды 2
- добавление двоичной памяти "% s.memory"% $ filename startAddr endAddr
- конец
(я бы даже согласился на имя файла без его форматирования, если это окажется трудной частью)
Однако я не мог заставить gdb принимать что-либо, кроме явного имени файла для команд append / dump. когда я запустил «добавить двоичную память $ filename ...», я получил вывод в файле «/ workdir / $ filename».
Есть ли способ заставить GDB выбирать имя файла во время выполнения?
Спасибо!