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

Материал из Русский 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@EtersoftFAQ по использованию 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
Легальность DCOM95IE5DCOMMSXML
Утилиты для работы с Wine WinetricksWineToolsQ4WinePlayOnLinuxIEs4LinuxWine-DoorsSwineWine LauncherLutris
Разработчику
Компоненты WindowsЗапрет отключения защиты программыУправление обработчиком исключенийStraceNTИзмерение скорости функций WinAPIGLУстройство чтения смарт-картПрофилированиеТесты для проверки интерфейсовНаписание тестов в системе WineАутентификация в домене ADРепозиторииПрименение Git-патчей
Помощь Создание патчейНаписание приложения под wineОтправка патчейСборка eterhackСборка wine-public
Отладка Способы отладкиWINEDEBUGWinedbg
Разработка WINE
1CODBCWinHelpКомпасМетодикаТестирование доступаЦветаФайловый диалогТестированиеЛитератураИзображенияWin32ШрифтыФайловые блокировкиСсылкиКлючи защитыRPMWineGeckoListViewУпаковка Wine
Производителю
Родственные проекты
LUKReactOSARWINSSCrossOverKernelEx
Прочее
PageSetupDlgFreeBSDWwr