Гу и ПК команда Windbg - PullRequest
       2

Гу и ПК команда Windbg

0 голосов
/ 28 сентября 2008

Может кто-нибудь показать мне пример того, как использовать эти две команды в Windbg, пожалуйста? Я прочитал документ в debugger.chm, но запутался. Я выполнил поиск в Google и MSDN, но не нашел легкого для изучения образца.

Ответы [ 2 ]

1 голос
/ 28 сентября 2008

Подумайте о функциональных уровнях согласно следующему псевдокоду:

 1  x = 0
 2  y = 0
 3  call 8
 4  x = 5
 5  y = 7
 6  call 8
 7  halt

 8  print x
 9  print y
10  call 12
11  return

12  print x + y
13  print x * y
14  return

Команды в основном "запускаются до наступления события". Это событие приводит к сбою отладчика (остановка выполнения и ожидание вашей команды).

Команда "gu" выполняется до тех пор, пока не достигнет следующего наивысшего уровня стека. Если вы находитесь на строках 8, 9, 10 или 11, вы получите 4 или 7 в зависимости от того, "call 8" вызвал этот код. Если вы на линии 12, 13 или 14, вы сломаете на 11.

Думайте об этом как о работающем, пока вы не переместитесь вверх по стеку. Обратите внимание, что если вы сначала спуститесь, вам придется подняться дважды.

Команда "pc" выполняется до следующего вызова, поэтому, если вы находитесь в строке 1, она будет прерываться в строке 3. Это своего рода противоположность "gu", поскольку она останавливается, когда пытаясь уйти вниз уровень стека.

0 голосов
/ 07 октября 2008

Что-то не так с выводом Windbg - «Не удается продолжить завершенный шаг». Вот соответствующий вывод из Windbg и исходного кода, есть идеи?

(Я устанавливаю точку останова в main, затем дважды перехожу к следующей команде p и затем использую команду gc - тогда происходит ошибка.)

(204.18c0): исключение инструкции разрыва - код 80000003 (первый шанс) Ntdll DbgBreakPoint: 00000000 77ef2aa0 cc int 3 0:000> bp main 0:000> g Breakpoint 0 hit TestDebug1!main: 00000001 40001090 4057 push rdi 0: 000> р TestDebug1 главный + 0x1a: 00000001 400010aa c7442424c8000000 mov dword ptr [rsp+24h],0C8h ss:00000000 0012feb4 = CCCCCCCC 0: 000> р TestDebug1 главный + 0x22: 00000001`400010b2 488d442424 Леа Ракс, [rsp + 24 ч] 0: 000> gc Не могу продолжить завершенный шаг

включает

с использованием пространства имен std;

int foo () { int b = 300;

return b;

}

int goo () { int a = 400;

return a;

} * * тысяча двадцать-один

int main () { int a = 200;

int* b = &a;

foo();

a = 400;

goo();

return 0;

}

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