diff --git a/dlls/ntdll/debugtools.c b/dlls/ntdll/debugtools.c index 92ec71f8d83..7860809d4f8 100644 --- a/dlls/ntdll/debugtools.c +++ b/dlls/ntdll/debugtools.c @@ -15,6 +15,8 @@ #include "winnt.h" #include "wtypes.h" +DECLARE_DEBUG_CHANNEL(tid); + /* ---------------------------------------------------------------------- */ struct debug_info @@ -248,8 +250,10 @@ int wine_dbg_log(enum __DEBUG_CLASS cls, const char *channel, int ret = 0; va_start(valist, format); + if (TRACE_ON(tid)) + ret = wine_dbg_printf( "%08lx:", (DWORD)NtCurrentTeb()->tid ); if (cls < __DBCL_COUNT) - ret = wine_dbg_printf( "%s:%s:%s ", classes[cls], channel + 1, function ); + ret += wine_dbg_printf( "%s:%s:%s ", classes[cls], channel + 1, function ); if (format) ret += wine_dbg_vprintf( format, valist ); va_end(valist); diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 3c03a05d6fe..3e5f1cc4803 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -5,7 +5,7 @@ debug_channels (aspi atom cdrom console ddraw debug delayhlp dll dosfs dosmem file fixup global heap int int10 int16 int17 int19 int21 int31 io loaddll local module ntdll process profile reg relay resource segment seh selector server snoop string system tape task thread - thunk timer toolhelp ver virtual vxd win32) + thunk tid timer toolhelp ver virtual vxd win32) #note that the Zw... functions are alternate names for the #Nt... functions. (see www.sysinternals.com for details) diff --git a/if1632/relay.c b/if1632/relay.c index c4f27af32fe..17f9b526bd3 100644 --- a/if1632/relay.c +++ b/if1632/relay.c @@ -154,7 +154,7 @@ void RELAY_DebugCallFrom16( CONTEXT86 *context ) args = BUILTIN_GetEntryPoint16( frame, funstr, &ordinal ); if (!args) return; /* happens for the two snoop register relays */ if (!RELAY_ShowDebugmsgRelay(funstr)) return; - DPRINTF( "Call %s(",funstr); + DPRINTF( "%08lx:Call %s(",GetCurrentThreadId(),funstr); VA_START16( args16 ); usecdecl = ( *args == 'c' ); @@ -274,7 +274,7 @@ void RELAY_DebugCallFrom16Ret( CONTEXT86 *context, int ret_val ) args = BUILTIN_GetEntryPoint16( frame, funstr, &ordinal ); if (!args) return; if (!RELAY_ShowDebugmsgRelay(funstr)) return; - DPRINTF( "Ret %s() ",funstr); + DPRINTF( "%08lx:Ret %s() ",GetCurrentThreadId(),funstr); if ( memcmp( args+2, "long_", 5 ) == 0 ) { @@ -324,7 +324,8 @@ void RELAY_DebugCallTo16( LPVOID target, int nb_args, BOOL reg_func ) { CONTEXT86 *context = (CONTEXT86 *)target; - DPRINTF("CallTo16(func=%04lx:%04x,ds=%04lx", + DPRINTF("%08lx:CallTo16(func=%04lx:%04x,ds=%04lx", + GetCurrentThreadId(), context->SegCs, LOWORD(context->Eip), context->SegDs ); while (nb_args--) DPRINTF( ",0x%04x", *--stack16 ); DPRINTF(") ss:sp=%04x:%04x\n", SELECTOROF(teb->cur_stack), @@ -336,7 +337,8 @@ void RELAY_DebugCallTo16( LPVOID target, int nb_args, BOOL reg_func ) } else { - DPRINTF("CallTo16(func=%04x:%04x,ds=%04x", + DPRINTF("%08lx:CallTo16(func=%04x:%04x,ds=%04x", + GetCurrentThreadId(), HIWORD(target), LOWORD(target), SELECTOROF(teb->cur_stack) ); while (nb_args--) DPRINTF( ",0x%04x", *--stack16 ); DPRINTF(") ss:sp=%04x:%04x\n", SELECTOROF(teb->cur_stack), @@ -356,7 +358,8 @@ void RELAY_DebugCallTo16Ret( BOOL reg_func, int ret_val ) if (!reg_func) { - DPRINTF("CallTo16() ss:sp=%04x:%04x retval=0x%08x\n", + DPRINTF("%08lx:RetFrom16() ss:sp=%04x:%04x retval=0x%08x\n", + GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->cur_stack), OFFSETOF(NtCurrentTeb()->cur_stack), ret_val); } @@ -364,7 +367,8 @@ void RELAY_DebugCallTo16Ret( BOOL reg_func, int ret_val ) { CONTEXT86 *context = (CONTEXT86 *)ret_val; - DPRINTF("CallTo16() ss:sp=%04x:%04x\n", + DPRINTF("%08lx:RetFrom16() ss:sp=%04x:%04x\n", + GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->cur_stack), OFFSETOF(NtCurrentTeb()->cur_stack)); DPRINTF(" AX=%04x BX=%04x CX=%04x DX=%04x BP=%04x SP=%04x\n", diff --git a/loader/pe_image.c b/loader/pe_image.c index 8fe4fa40d09..a704354cc26 100644 --- a/loader/pe_image.c +++ b/loader/pe_image.c @@ -731,10 +731,13 @@ BOOL PE_InitDLL( HMODULE module, DWORD type, LPVOID lpReserved ) (nt->OptionalHeader.AddressOfEntryPoint)) { DLLENTRYPROC entry = (void*)((char*)module + nt->OptionalHeader.AddressOfEntryPoint); - TRACE_(relay)("CallTo32(entryproc=%p,module=%08x,type=%ld,res=%p)\n", - entry, module, type, lpReserved ); - + if (TRACE_ON(relay)) + DPRINTF("%08lx:Call PE DLL (proc=%p,module=%08x,type=%ld,res=%p)\n", + GetCurrentThreadId(), entry, module, type, lpReserved ); retv = entry( module, type, lpReserved ); + if (TRACE_ON(relay)) + DPRINTF("%08lx:Ret PE DLL (proc=%p,module=%08x,type=%ld,res=%p) retval=%x\n", + GetCurrentThreadId(), entry, module, type, lpReserved, retv ); } return retv; diff --git a/relay32/relay386.c b/relay32/relay386.c index 276833fd3d6..28173723cdd 100644 --- a/relay32/relay386.c +++ b/relay32/relay386.c @@ -182,9 +182,9 @@ static LONGLONG RELAY_CallFrom32( int ret_addr, ... ) get_entry_point( buffer, relay ); - DPRINTF( "Call %s(", buffer ); + DPRINTF( "%08lx:Call %s(", GetCurrentThreadId(), buffer ); RELAY_PrintArgs( args, nb_args, relay->argtypes ); - DPRINTF( ") ret=%08x tid=%08lx\n", ret_addr, GetCurrentThreadId() ); + DPRINTF( ") ret=%08x\n", ret_addr ); ret64 = (relay->argtypes & 0x80000000) && (nb_args < 16); if (relay->ret == 0xc3) /* cdecl */ @@ -274,11 +274,13 @@ static LONGLONG RELAY_CallFrom32( int ret_addr, ... ) } } if (ret64) - DPRINTF( "Ret %s() retval=%08x%08x ret=%08x tid=%08lx\n", - buffer, (UINT)(ret >> 32), (UINT)ret, ret_addr, GetCurrentThreadId() ); + DPRINTF( "%08lx:Ret %s() retval=%08x%08x ret=%08x\n", + GetCurrentThreadId(), + buffer, (UINT)(ret >> 32), (UINT)ret, ret_addr ); else - DPRINTF( "Ret %s() retval=%08x ret=%08x tid=%08lx\n", - buffer, (UINT)ret, ret_addr, GetCurrentThreadId() ); + DPRINTF( "%08lx:Ret %s() retval=%08x ret=%08x\n", + GetCurrentThreadId(), + buffer, (UINT)ret, ret_addr ); return ret; } @@ -320,7 +322,7 @@ void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context ) get_entry_point( buffer, relay ); - DPRINTF( "Call %s(", buffer ); + DPRINTF( "%08lx:Call %s(", GetCurrentThreadId(), buffer ); RELAY_PrintArgs( args, nb_args, relay->argtypes ); DPRINTF( ") ret=%08lx fs=%04lx\n", context->Eip, context->SegFs ); @@ -364,7 +366,8 @@ void WINAPI RELAY_DoCallFrom32Regs( CONTEXT86 *context ) assert(FALSE); } - DPRINTF( "Ret %s() retval=%08lx ret=%08lx fs=%04lx\n", + DPRINTF( "%08lx:Ret %s() retval=%08lx ret=%08lx fs=%04lx\n", + GetCurrentThreadId(), buffer, context->Eax, context->Eip, context->SegFs ); DPRINTF(" eax=%08lx ebx=%08lx ecx=%08lx edx=%08lx esi=%08lx edi=%08lx\n", diff --git a/relay32/snoop.c b/relay32/snoop.c index 89e85508650..97c1c5b9033 100644 --- a/relay32/snoop.c +++ b/relay32/snoop.c @@ -322,7 +322,7 @@ void WINAPI SNOOP_DoEntry( CONTEXT86 *context ) context->Eip = (DWORD)fun->origfun; - DPRINTF("CALL %s.%ld: %s(",dll->name,ordinal,fun->name); + DPRINTF("%08lx:CALL %s.%ld: %s(",GetCurrentThreadId(),dll->name,ordinal,fun->name); if (fun->nrofargs>0) { max = fun->nrofargs; if (max>16) max=16; for (i=0;iargs = HeapAlloc(GetProcessHeap(),0,16*sizeof(DWORD)); memcpy(ret->args,(LPBYTE)(context->Esp + 4),sizeof(DWORD)*16); } - DPRINTF(") ret=%08lx tid=%08lx\n", (DWORD)ret->origreturn, GetCurrentThreadId()); + DPRINTF(") ret=%08lx\n",(DWORD)ret->origreturn); } @@ -353,18 +353,21 @@ void WINAPI SNOOP_DoReturn( CONTEXT86 *context ) if (ret->args) { int i,max; - DPRINTF("RET %s.%ld: %s(",ret->dll->name,ret->ordinal,ret->dll->funs[ret->ordinal].name); + DPRINTF("%08lx:RET %s.%ld: %s(", + GetCurrentThreadId(), + ret->dll->name,ret->ordinal,ret->dll->funs[ret->ordinal].name); max = ret->dll->funs[ret->ordinal].nrofargs; if (max>16) max=16; for (i=0;iargs[i]),(iEax, (DWORD)ret->origreturn, GetCurrentThreadId()); + DPRINTF(") retval = %08lx ret=%08lx\n", + context->Eax,(DWORD)ret->origreturn ); HeapFree(GetProcessHeap(),0,ret->args); ret->args = NULL; } else - DPRINTF("RET %s.%ld: %s() retval = %08lx ret=%08lx tid=%08lx\n", + DPRINTF("%08lx:RET %s.%ld: %s() retval = %08lx ret=%08lx tid=%08lx\n", + GetCurrentThreadId(), ret->dll->name,ret->ordinal,ret->dll->funs[ret->ordinal].name, context->Eax, (DWORD)ret->origreturn, GetCurrentThreadId()); ret->origreturn = NULL; /* mark as empty */ diff --git a/scheduler/process.c b/scheduler/process.c index b0371f95977..74e2f3e5d38 100644 --- a/scheduler/process.c +++ b/scheduler/process.c @@ -393,8 +393,9 @@ static void start_process(void) /* Call UserSignalProc ( USIG_PROCESS_RUNNING ... ) only for non-GUI win32 apps */ if (console_app) PROCESS_CallUserSignalProc( USIG_PROCESS_RUNNING, 0 ); - TRACE_(relay)( "Starting Win32 process %s (entryproc=%p) tid=%08lx\n", - main_exe_name, entry, GetCurrentThreadId() ); + if (TRACE_ON(relay)) + DPRINTF( "%08lx:Starting process %s (entryproc=%p)\n", + GetCurrentThreadId(), main_exe_name, entry ); if (debugged) DbgBreakPoint(); /* FIXME: should use _PEB as parameter for NT 3.5 programs ! * Dunno about other OSs */ diff --git a/scheduler/thread.c b/scheduler/thread.c index 49df3c7eb23..5475e435f2d 100644 --- a/scheduler/thread.c +++ b/scheduler/thread.c @@ -272,7 +272,8 @@ static void THREAD_Start(void) NtCurrentTeb()->cleanup = SERVICE_AddObject( cleanup_object, (PAPCFUNC)THREAD_FreeTEB, (ULONG_PTR)NtCurrentTeb() ); - TRACE_(relay)("Starting thread %08lx\n", GetCurrentThreadId()); + if (TRACE_ON(relay)) + DPRINTF("%08lx:Starting thread (entryproc=%p)\n", GetCurrentThreadId(), func ); PROCESS_CallUserSignalProc( USIG_THREAD_INIT, 0 ); PE_InitTls(); diff --git a/windows/winproc.c b/windows/winproc.c index da29c86a222..c6b3b83f8e9 100644 --- a/windows/winproc.c +++ b/windows/winproc.c @@ -161,16 +161,19 @@ static LRESULT WINPROC_CallWndProc( WNDPROC proc, HWND hwnd, UINT msg, { LRESULT retvalue; int iWndsLocks; - - TRACE_(relay)("(wndproc=%p,hwnd=%08x,msg=%s,wp=%08x,lp=%08lx)\n", - proc, hwnd, SPY_GetMsgName(msg), wParam, lParam ); + + if (TRACE_ON(relay)) + DPRINTF( "%08lx:Call window proc %p (hwnd=%08x,msg=%s,wp=%08x,lp=%08lx)\n", + GetCurrentThreadId(), proc, hwnd, SPY_GetMsgName(msg), wParam, lParam ); /* To avoid any deadlocks, all the locks on the windows structures must be suspended before the control is passed to the application */ iWndsLocks = WIN_SuspendWndsLock(); retvalue = WINPROC_wrapper( proc, hwnd, msg, wParam, lParam ); WIN_RestoreWndsLock(iWndsLocks); - TRACE_(relay)("(wndproc=%p,hwnd=%08x,msg=%s,wp=%08x,lp=%08lx) retval=%08lx\n", - proc, hwnd, SPY_GetMsgName(msg), wParam, lParam, retvalue ); + + if (TRACE_ON(relay)) + DPRINTF( "%08lx:Ret window proc %p (hwnd=%08x,msg=%s,wp=%08x,lp=%08lx) retval=%08lx\n", + GetCurrentThreadId(), proc, hwnd, SPY_GetMsgName(msg), wParam, lParam, retvalue ); return retvalue; }