Added a WINEDEBUG environment variable that allows turning on debug

output as early as possible during startup.
This commit is contained in:
Alexandre Julliard 2003-12-05 00:17:41 +00:00
parent a4330f9363
commit bb4ddfec28
4 changed files with 68 additions and 54 deletions

View File

@ -55,9 +55,12 @@
#include "wine/library.h"
#include "wine/pthread.h"
#include "wine/server.h"
#include "wine/debug.h"
#include "winerror.h"
#include "ntdll_misc.h"
WINE_DEFAULT_DEBUG_CHANNEL(server);
/* Some versions of glibc don't define this */
#ifndef SCM_RIGHTS
#define SCM_RIGHTS 1
@ -480,7 +483,7 @@ static void start_server( const char *oldcwd )
{
static int started; /* we only try once */
char *path, *p;
char *argv[2];
char *argv[3];
if (!started)
{
@ -489,6 +492,9 @@ static void start_server( const char *oldcwd )
if (pid == -1) fatal_perror( "fork" );
if (!pid)
{
argv[0] = "wineserver";
argv[1] = TRACE_ON(server) ? "-d" : NULL;
argv[2] = NULL;
/* if server is explicitly specified, use this */
if ((p = getenv("WINESERVER")))
{
@ -499,14 +505,13 @@ static void start_server( const char *oldcwd )
sprintf( path, "%s/%s", oldcwd, p );
p = path;
}
execl( p, p, NULL );
argv[0] = p;
execv( argv[0], argv );
fatal_perror( "could not exec the server '%s'\n"
" specified in the WINESERVER environment variable", p );
}
/* now use the standard search strategy */
argv[0] = "wineserver";
argv[1] = NULL;
wine_exec_wine_binary( "wineserver", argv, NULL );
wine_exec_wine_binary( argv[0], argv, NULL );
fatal_error( "could not exec wineserver\n" );
}
waitpid( pid, &status, 0 );

View File

@ -11,20 +11,18 @@ PROGRAM/ARGUMENTS
section of the man page.
.SH DESCRIPTION
.B wine
.I program
loads and runs the given program, where the program is a DOS, Windows 3.x,
or Win32 executable (x86 binaries only).
loads and runs the given program, where the program is a DOS, Windows
3.x, or Win32 executable (x86 binaries only).
.PP
For debugging wine, use
.B winedbg
.I program
instead.
.PP
For running CUI executables (Windows console programs), use
.B wineconsole
instead of
.B wine
. This will display all the output in a separate windows (this requires X11 to
.B wine.
This will display all the output in a separate windows (this requires X11 to
run). Not using
.B wineconsole
for CUI programs will only provide very limited console support, and your
@ -39,8 +37,10 @@ using none at all or the ones from older Windows versions.
A large percentage of the API has been implemented,
although there are still several major pieces of work left to do.
.SH REQUIREMENTS AND INSTALLATION
Read the README file in the Wine source distribution and the wine.conf
man page to know what Wine requires and how it is installed from source.
Read the README file in the Wine source distribution and the
.BR wine.conf (5)
man page to know what Wine requires and how it is installed from
source.
.SH OPTIONS
.TP
.I --debugmsg [xxx]#name[,[xxx1]#name1]
@ -57,11 +57,11 @@ If xxx is not specified, all debugging messages for the specified
channel are turned on. Each channel will print messages about a particular
component of
.B wine.
# is required and can be either + or -. Note that
there is not a space after the comma between names. yyy are either the
name of a whole DLL or a single API entry by name you either
want to include or exclude from the relay listing. Case doesn't matter
for these. You can do the same for snoop.
# can be either + or - to switch the specified channel on or off
respectively. If there is no
.I xxx
part before it, a leading + can be omitted. Note that spaces are not
allowed anywhere in the string.
.PP
For instance:
.PP
@ -77,32 +77,12 @@ on all relay messages (API calls).
.br
.I --debugmsg +relay
will turn on all relay messages. For more control on including or excluding
functions and dlls look into the [Debug] section of the wine configuration file.
functions and dlls from the relay trace look into the [Debug] section
of the wine configuration file.
.PP
The full list of names is:
all, accel, advapi, animate, aspi, atom, avifile, bitblt, bitmap, caret,
cdrom, class, clipboard, clipping, combo, comboex, comm, commctrl, commdlg,
console, crtdll, cursor, datetime, dc, ddeml, ddraw, debug, debugstr,
delayhlp, dialog, dinput, dll, dosfs, dosmem, dplay, driver, dsound, edit,
elfdll, enhmetafile, event, exec, file, fixup, font, gdi, global, graphics,
header, heap, hook, hotkey, icmp, icon, imagehlp, imagelist, imm, int, int10,
int16, int17, int19, int21, int31, io, ipaddress, joystick, key, keyboard,
loaddll, ldt, listbox, listview, local, mci, mcianim, mciavi, mcicda, mcimidi,
mciwave, mdi, menu, message, metafile, midi, mmaux, mmio, mmsys, mmtime,
module, monthcal, mpr, msacm, msg, msvideo, nativefont, nonclient, ntdll,
odbc, ole, opengl, pager, palette, pidl, print, process, profile, progress,
prop, propsheet, psapi, psdrv, ras, rebar, reg, region, relay, resource,
richedit, scroll, segment, seh, selector, sendmsg, server, setupapi,
setupx, shell, snoop, sound, static, statusbar, storage, stress, string,
syscolor, system, tab, tape, tapi, task, text, thread, thunk, timer, toolbar,
toolhelp, tooltips, trackbar, treeview, ttydrv, tweak, typelib, updown, ver,
virtual, vxd, wave, win, win16drv, win32, winedbg, wing, wininet, winsock,
winspool, wnet, x11 and x11drv.
.PP
For more information on debugging messages, see the file
.I documentation/running.sgml
in the source distribution (FIXME: outdated).
For more information on debugging messages, see the
.I Running Wine
chapter of the Wine User Guide.
.RE
.PD 1
.SH PROGRAM/ARGUMENTS
@ -204,6 +184,10 @@ try to load
and if this doesn't exist it will then look for a file named "wine" in
the path and in a few other likely locations.
.TP
.I WINEDEBUG
Turns debugging messages on or off. The syntax of the variable is
identical to the syntax of the arguments for the --debugmsg option.
.TP
.I WINEDLLPATH
Specifies the path(s) in which to search for builtin dlls and Winelib
applications. This is a list of directories separated by ":". In
@ -312,7 +296,7 @@ pre-built contents of the documentation in various formats
The latest snapshot of the code may be obtained via CVS. For information
on how to do this, please see
.I
http://www.winehq.org/development/
http://www.winehq.org/cvs
.PP
WineHQ, the
.B wine
@ -326,14 +310,15 @@ The
newsgroup is
.I comp.emulators.ms-windows.wine.
It is used for discussion of various
.B wine end user aspects/help.
.B wine
end user aspects/help.
.PP
For further information about
.B wine
development, you might want to subscribe to the
.B wine
mailing lists at
.I http://www.winehq.org/development/#ml
.I http://www.winehq.org/forums
.SH FILES
.PD 0
.TP

View File

@ -155,11 +155,7 @@ int wine_dbg_parse_options( const char *str )
if ((next = strchr( opt, ',' ))) *next++ = 0;
p = opt + strcspn( opt, "+-" );
if (!p[0] || !p[1]) /* bad option, skip it */
{
errors++;
continue;
}
if (!p[0]) p = opt; /* assume it's a debug channel name */
if (p > opt)
{
@ -182,10 +178,15 @@ int wine_dbg_parse_options( const char *str )
}
else
{
if (*p == '+') set = ~0;
else clear = ~0;
if (*p == '-') clear = ~0;
else set = ~0;
}
if (*p == '+' || *p == '-') p++;
if (!p[0])
{
errors++;
continue;
}
p++;
if (!strcmp( p, "all" )) p = ""; /* empty string means all */
wine_dbg_add_option( p, set, clear );
}

View File

@ -411,6 +411,22 @@ void *wine_dll_load_main_exe( const char *name, char *error, int errorsize,
}
/***********************************************************************
* debug_usage
*/
static void debug_usage(void)
{
static const char usage[] =
"Syntax of the WINEDEBUG variable:\n"
" WINEDEBUG=[class]+xxx,[class]-yyy,...\n\n"
"Example: WINEDEBUG=+all,warn-heap\n"
" turns on all messages except warning heap messages\n"
"Available message classes: err, warn, fixme, trace\n";
write( 2, usage, sizeof(usage) - 1 );
exit(1);
}
/***********************************************************************
* wine_init
*
@ -419,6 +435,7 @@ void *wine_dll_load_main_exe( const char *name, char *error, int errorsize,
void wine_init( int argc, char *argv[], char *error, int error_size )
{
extern char **environ;
char *wine_debug;
int file_exists;
void *ntdll;
void (*init_func)(void);
@ -429,6 +446,12 @@ void wine_init( int argc, char *argv[], char *error, int error_size )
__wine_main_argv = argv;
__wine_main_environ = environ;
if ((wine_debug = getenv("WINEDEBUG")))
{
if (!strcmp( wine_debug, "help" )) debug_usage();
wine_dbg_parse_options( wine_debug );
}
if (!(ntdll = dlopen_dll( "ntdll.dll", error, error_size, 0, &file_exists ))) return;
if (!(init_func = wine_dlsym( ntdll, "__wine_process_init", error, error_size ))) return;
init_func();