Запись процесса GDB / журнал воспроизведения - PullRequest
4 голосов
/ 01 апреля 2011

Может кто-нибудь сказать мне, где будет храниться журнал выполнения при использовании функции записи / воспроизведения процесса в gdb?

Спасибо Радж

Обновление

#include <stdio.h>

int main (int argc, char const *argv[])
{
    printf("Hello World\n");
    printf("How are you?\n");
    char *c = NULL;
    printf("%c\n", *c);
    return 0;
}      

Код выше seg дает сбой при разыменовании c . Я хочу использовать этот пример, чтобы понять, как я могу использовать reverse-next / reverse-continue для возврата после сегфоута. Я могу сделать reverse-next и достичь первого оператора printf, на котором я ставлю точку останова при записи выполнения. После этого, когда я пытаюсь выполнить команду «next» в gdb, я вижу, что курсор перемещается через операторы printf, но я не вижу вывода, напечатанного на терминале. Таким образом, я хочу знать, можно ли использовать функцию записи / воспроизведения для просмотра истории выполнения даже после ошибки segfault?

1 Ответ

6 голосов
/ 01 апреля 2011

Я думал, вам нужно было указать это вручную с помощью

record save filename

Имя файла по умолчанию - gdb_record.process_id, где process_id - идентификатор процесса отлаженного процесса. Это означает, что если вы не укажете это, посмотрите в CWD отладчика

Обновление

Относительно вашего дополнительного вопроса по insn-number-max:

info record 

Показать различную статистику о состоянии записи процесса и его памяти буфер журнала выполнения, в том числе:

  • В режиме записи или в режиме воспроизведения.
  • Самый низкий номер записанной инструкции (считая с того момента, когда текущий журнал выполнения начал записывать инструкции).
  • Наибольший записанный номер инструкции.
  • Текущая инструкция для воспроизведения (если в режиме воспроизведения).
  • Количество инструкций, содержащихся в журнале выполнения.
  • Максимальное количество инструкций, которые могут содержаться в исполнении журнал.

Я не уверен, но это может указывать на то, что целое хранится в памяти в конце концов. Конечно, 64-битная система и большое количество свопов (и неограниченный ulimit) сделают это «виртуальным» ограничением

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