Отображение каждой инструкции по сборке, выполненной в GDB
В настоящее время у меня есть хитрая ошибка, которая возникает в месте, где у меня нет доступа к источнику или символам, то есть я вижу инструкцию и ее адрес, где происходит сбой, но это все.Что я хотел бы сделать, это иметьgdb
запускать без необходимости взаимодействия и отображать каждую инструкцию по мере необходимости, но я еще не нашел способ сделать это.
Я надеюсь достичь чего-то вроде этого:
(gdb) /* some command */
0x2818a7c0: push %ebp
0x2818a7c1: mov %esp,%ebp
0x2818a7c3: push %ebx
0x2818a7c4: sub $0x4,%esp
...
0x28563622: mov %esi,0x0(%eax)
Program received signal SIGSEGV, Segmentation fault.
Что я делал, так это настраивал отображение счетчика программы, например так:
(gdb) display/i $pc
И затем работает через код сstepi
:
(gdb) stepi
1: x/i $pc 0x2818a7c0: push %ebp
Тем не менее, сбой происходит за сотни или тысячи инструкций, и я бы хотел, чтобы каждый из них (вместе, если предпочтительнее) мог видеть каждый раз, без необходимости нажимать «ввод» так много раз. Кроме того, если бы я сделал это вручную, я бы увидел(gdb)
подсказка между каждой инструкцией, что меньше, чем хотелось бы.
Один маршрут, который я кратко изучил, этоскриптовый, но моя единственная мысль состоит в том, чтобы настроить наmain()
, чтобы он отображал и еще один перерыв (для следующей инструкции), а затем продолжил, но тогда я не могу использоватьcommands
в пределахcommands
блок, так что это не сработает так, как я себе это представляю.
В случае, если это имеет значение, я работаю над FreeBSD.