Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с дебагером 
:(
    Опции темы
neosapient
Дата 8.10.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Вообщем пишу под винду, в VC7.
Допустим есть текст программы
Код

void main (void)
{
MessageBox(0,"Hello, World", "Example", MB_OKCANCEL);
}

У дебагера есть окна: Autos, Locals, Watch...
В них можно посмотреть содержимое переменных.
Функция может возвращать переменные (напр. MessageBox).
Каким образом можно определить  значения возвращаемых переменных в окне дебагера?
В смысле, можно выводить на экран (сообщения), записывать в файл (логи), или так создавая ненужную переменную, получающую  результат.

Собственно, ставлю брейкпоинт напротив MessageBox`a и смотрю содержимое переменной i.
Код

void main (void)
{
int i;
i=MessageBox(0,"Hello, World", "Example", MB_OKCANCEL);
}

А как без переменной пределить возвращаемые  значения в окне дебагера?
PM MAIL   Вверх
GremlinProg
Дата 8.10.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



для системных функций, таких как MessageBox, результат можно увидеть, добавив в watch регистр eax, а для внутренних C/C++ методов результат отображается в окне Autos, в первых строках, при этом запись выглядит примерно так:
mymethod returned | 10 | int
где mymethod - метод возвращающий int, результат равен 10, тип результата int

Причем, если производится сразу несколько вызовов в различные методы(например, в параметр mymethod будет передаваться int возвращаемый другим методом), то в окне Autos будет виден результат всех методов, в порядке их вызовов

Дополнительно ко всему, после вызова системных функций полезно проверять GetLastError. В VS для этого существует специальная Watch-переменная ERR. Если в watch добавить строку "ERR,hr" то вместо кода ошибки будет отображаться понятная строка, описывающая произошедший сбой, если ошибок нет, то - S_OK


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Nastya
Дата 10.10.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 3
Всего: 44



1. В Autos - после выхода из функции в верхней строке пишется что она вернула.
2. Можно использовать отладочные макросы, типа TRACE то что выводится в них будет появлятся в окне Output


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
neosapient
Дата 10.10.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Цитата

 Можно использовать отладочные макросы, типа TRACE то что выводится в них будет появлятся в окне Output 

Про это я не слышал можно по подробнее
PM MAIL   Вверх
0x07L
Дата 10.10.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: 4
Всего: 5



TRACE - это MFC'шная фича. Для программирования в WinAPI подойдет функция OutputDebugString (см MSDN)
PM MAIL   Вверх
neosapient
Дата 10.10.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Хм, действитель интерестно, не знал  smile 

Там рядом списочек:
CheckRemoteDebuggerPresent - Determines whether the specified process is being debugged. 
ContinueDebugEvent - Enables a debugger to continue a thread that previously reported a debugging event. 
DebugActiveProcess - Enables a debugger to attach to an active process and debug it. 
DebugActiveProcessStop - Stops the debugger from debugging the specified process. 
DebugBreak - Causes a breakpoint exception to occur in the current process. 
DebugBreakProcess - Causes a breakpoint exception to occur in the specified process. 
DebugSetProcessKillOnExit - Sets the action to be performed when the debugging thread exits. 
FatalExit - Transfers execution control to the debugger. 
FlushInstructionCache - Flushes the instruction cache for the specified process. 
GetThreadContext - Retrieves the context of the specified thread. 
GetThreadSelectorEntry - Retrieves a descriptor table entry for the specified selector and thread. 
IsDebuggerPresent - Determines whether the calling process is being debugged. 
OutputDebugString - Sends a string to the debugger for display. 
ReadProcessMemory - Reads data from an area of memory in a specified process. 
SetThreadContext - Sets the context for the specified thread. 
WaitForDebugEvent - Waits for a debugging event to occur in a process being debugged. 
WriteProcessMemory - Writes data to an area of memory in a specified process. 

 smile  smile  smile 

Для меня данная ветка форума очень позновательна, расскажите еще что-нибудь интерестное.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.