Способы отладки

Материал из Русский WINE
Перейти к: навигация, поиск

Как получить адрес, по которому произойдёт переход после завершения выполнения функции

void **ptr;
void *ret_addr;
__asm__( "movl %%ebp,%0" : "=r" (ptr) );
ret_addr = *(++ptr);

Вывод backtrace и адресов, по которым загружены модули

char buf[256];
FILE *f;
sprintf(buf, "winedbg %d 1>&2", GetCurrentProcessId());
f = popen(buf, "w");
fprintf(f, "bt\n");
fprintf(f, "info share\n");
pclose(f);

Отключение вывода отладочных сообщений

unsigned char _flags = __wine_dbg_get_channel_flags(&__wine_dbch_istorage);
/* Отключаем вывод отладочных сообщений для канала istorage */
__wine_dbg_set_channel_flags(&__wine_dbch_istorage, 0, _flags);
..............
/* Включаем вывод отладочных сообщений для канала istorage */
__wine_dbg_set_channel_flags(&__wine_dbch_istorage, _flags, 0);

Отладка закрытой части

Небольшие заметки по отладке в закрытой части

Чтобы подцепить ту закрытую часть, которую нужно, надо установить

export LD_LIBRARY_PATH=/home/.../Projects/wine-etersoft/lib/.libs

Удобнее всего просто запускать wine через скрипт lib/runwith.sh в закрытой части, например:

$ /home/.../Projects/WINE/wine-etersoft/lib/runwith.sh wine notepad
  • Для сборки закрытой части нужно autogen.sh, затем configure, затем make.
Если что-то не собралось (по причине отсутствия некоторых макросов) можно попробовать повторить всю операцию заново.
  • Важно
    . Отладочный вывод нельзя производить в stdout, а обязательно в stderr, например:
fprintf(stderr, "%s: WINE_UNIQUE\n", name);
Вывод в stdout не будет отображаться в консоли.
Wine
Search.png
Программы работающие в Wine • Скачать • Школьный Wine
WINE@Etersoft Общие сведения • Установка на 64-битные ОС • Особенности разработки • Патчи для WINE@Etersoft • Административная установка • Дополнительные компоненты • Как получить WINE@Etersoft? • Лицензия на документацию • Глоссарий • Использование аппаратных ключей защиты в Linux • Дополнительная информация • [ Совместная работа | по CIFS • по NFS ] • Изменение системных ограничений • Регистрация продукта • Пошаговая инструкция по установке rpm-пакетов • Обращение в службу поддержки • Терминальные решения • Установка WINE@Etersoft • Подписка на обновления • Настройка WINE@Etersoft • Разработчику • Enterprise • Что такое WINE@Etersoft SQL • Возможности • Среда для запуска приложений Windows • Использование WINE@Etersoft • FAQ по использованию WINE@Etersoft • Основные команды • WINE@Etersoft/Local • Что такое WINE@Etersoft Local
Программы Запуск БЭСТ 4+ • Запуск Консультант+ (сетевой версии) • ГарантF1 • Инфо-Бухгалтер 8.x • Налогоплательщик ЮЛ
1C Отличия от обычного Wine • Местоположение базы 1С • 1C: Предприятие 7.7 в WINE • Настройка 1С 7.7 для работы с SQL-сервером • Установка 1С: Предприятия 8.1 • Установка 1С: Предприятия 8.1 в трёхзвенном режиме
Пользователю
Помощь Использование Winecfg • Использование Regedit • Публичный префикс • Несколько версий • Ключи regedit
Легальность DCOM95 • IE5 • DCOM • MSXML
Утилиты для работы с Wine Winetricks • WineTools • Q4Wine • PlayOnLinux • IEs4Linux • Wine-Doors • Swine • Wine Launcher • Lutris
Разработчику
Компоненты Windows • Запрет отключения защиты программы • Управление обработчиком исключений • StraceNT • Измерение скорости функций WinAPI • GL • Устройство чтения смарт-карт • Профилирование • Тесты для проверки интерфейсов • Написание тестов в системе Wine • Аутентификация в домене AD • Репозитории • Применение Git-патчей
Помощь Создание патчей • Написание приложения под wine • Отправка патчей • Сборка eterhack • Сборка wine-public
Отладка Способы отладки • WINEDEBUG • Winedbg
Разработка WINE
1C • ODBC • WinHelp • Компас • Методика • Тестирование доступа • Цвета • Файловый диалог • Тестирование • Литература • Изображения • Win32 • Шрифты • Файловые блокировки • Ссылки • Ключи защиты • RPM • WineGecko • ListView • Упаковка Wine
Производителю
Родственные проекты
LUK • ReactOS • ARWINSS • CrossOver • KernelEx
Прочее
PageSetupDlg • FreeBSD • Wwr