![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| neosapient |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Вообщем пишу под винду, в VC7.
Допустим есть текст программы
У дебагера есть окна: Autos, Locals, Watch... В них можно посмотреть содержимое переменных. Функция может возвращать переменные (напр. MessageBox). Каким образом можно определить значения возвращаемых переменных в окне дебагера? В смысле, можно выводить на экран (сообщения), записывать в файл (логи), или так создавая ненужную переменную, получающую результат. Собственно, ставлю брейкпоинт напротив MessageBox`a и смотрю содержимое переменной i.
А как без переменной пределить возвращаемые значения в окне дебагера? |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
1. В Autos - после выхода из функции в верхней строке пишется что она вернула.
2. Можно использовать отладочные макросы, типа TRACE то что выводится в них будет появлятся в окне Output -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Про это я не слышал можно по подробнее |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
TRACE - это MFC'шная фича. Для программирования в WinAPI подойдет функция OutputDebugString (см MSDN)
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Хм, действитель интерестно, не знал
Там рядом списочек: 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. Для меня данная ветка форума очень позновательна, расскажите еще что-нибудь интерестное. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |