Отладка приложений


Просмотр параметров в стеке - часть 2


На рис. 6.4 показан стек в окне Memory отладчика в начале точки прерывания на функции CreateProcess. Первое значение — адрес возврата для инструкции OxFB6B3F6J 10 следующих — Параметры фуyrwbb CreateProcess (СМ. табл. 6.5). Параметры функции CreateProcess занимают 40 байт, а каждый параметр имеет длину 4 байта. Стек растет от старших адресов памяти к младшим, а параметры помещаются в стек справа налево, поэтому параметры появляются в окне Memory в том же порядке, как в определении функции.

Рис. 6.4. Стек в окне Memory отладчика Visual C++

Просматривать индивидуальные значения первых двух параметров можно двумя способами. Первый состоит в том, чтобы использовать окно Memory, переключая его в байтовый формат и рассматривая конкретный адрес. Второй, более легкий способ, состоит в том, чтобы буксировать (мышью) адрес, который требуется рассмотреть, в окно Watch. В окне Watch для просмотра адреса следует использовать оператор приведения типов. Например, чтобы просмотреть параметр ipAppiicationName в примере, надо поместить в окно Watch строку <char*)Oxooi2EAC4. Работает любой способ просмотра, и оба должны показать следующие значения:

0х0012ЕАС4 "c:\vb\C2.EXE"

0х0012ЕВС4 "С@ -11 "e:\temp\VB815574

-f "c:\junk\vb\Forml.frm _W 3 _Gy _G5

-GS4096 _dos _Z1

-Fo"c:\junk\vb\Forml.OBJ" _Zi _QIfdiv

-ML _basic"

Таблица 6.5. Параметры, которые VB6.EXE передает В функцию CreateProcess

Значение

Тип

Параметр

0x001 2ЕАС4

LPCTSTR

IpApplicationName

0x0012EBC4

LPTSTR

IpCommandLine

0x00000000

LPSECURITY_ATTRIBUTES

IpProcessAttributes

0x00000000

LPSECURITY_ATTRIBUTES

IpThreadAttributes

0x00000001

BOOL

blnheritHandles

0x08000000

DWORD

dwCreationFlags

0x00000000

LPVOID

IpEnvi r onment

0x00000000

LPCTSTR

IpCurrentDirectory

0x001 2EA3C

LPSTARTUPINFO

IpStartupInfo

0x001 2EC60

LPPROCESS_INFORMATION

IpProcessInformation

Получение предшествующих параметров не составило труда, потому что функция была остановлена на первой инструкции, прежде чем она поместила в стек дополнительные элементы. Для проверки параметров в середине функции нужно проделать немного больше работы. Например, найти положительные смещения относительно ЕВР. Иногда же лучше просто открыть окно Memory и начать просмотр.

 




Начало  Назад  Вперед



Книжный магазин