Способы отладки
Материал из Русский 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 не будет отображаться в консоли.