Hello again Geoff,
I had to change your
Post by GeoffHANDLE mythread = GetCurrentThread();
DWORD myThreadID = GetThreadId(mythread);
code to
DWORD myThreadID = GetCurrentThreadId(mythread);
after which it worked alright (I'm on XP sp3. It does not have
'GetThreadId()' in Kernel32). I got the "11111" as an exception-code, and
after changing it to MS_VC_EXCEPTION I got that one too, exactly as
described in the structure..
Post by GeoffIf I replace 11111 with MS_VC_EXCEPTION the __except
block isn't executed when I run it in the debugger but it is
executed when I run it in a console.
It might be that the debugger silently captures & handles the exception. It
is after all MS VC specific, and quite undocumented.
Post by GeoffIf you're getting that exception in your application I'd have to
conclude you've got some interesting debugging ahead.
How do you mean ?
By the way: My exception-event capturer isn't written in VC++. Its just
that as the exception is MS VC specific I thought that this would be the
most appropriate newsgroup to ask for its meaning.
Post by GeoffIf you're going to throw your own exceptions then you simply
use your own codes.
No, currently I just want to be able to see whatever events a particular app
throws. I might have used a ready-to-use debugger, but writing your own
tools is more fun (and educational to boot).
Remarkably, I got that other exception (subcode 0x00001001), the one I
mentioned in my first post, too.
So, I know that my code does indeed "capture" those events correctly, but
I'm still stuck in regard to MS_VC_EXCEPTIONs other subcodes. :-\
Regards,
Rudy Wieser
Post by Geoff//
// Usage: SetThreadName (-1, "MainThread");
//
#include <windows.h>
#include <cstdio>
const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
void SetThreadName( DWORD dwThreadID, char* threadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
puts("in try");
RaiseException(11111, 0, sizeof(info)/sizeof(ULONG_PTR),
(ULONG_PTR*)&info );
}
__except(puts("in filter"), EXCEPTION_EXECUTE_HANDLER)
{
puts("Exception was handled...");
DWORD ec = GetExceptionCode();
printf("Exception code: %i in %s: ID %i\n", ec, info.szName,
info.dwThreadID);
}
}
int main ()
{
HANDLE mythread = GetCurrentThread();
DWORD myThreadID = GetThreadId(mythread);
SetThreadName (myThreadID, "MainThread");
}
If I replace 11111 with MS_VC_EXCEPTION the __except block isn't
executed when I run it in the debugger but it is executed when I run
it in a console. If you're getting that exception in your application
I'd have to conclude you've got some interesting debugging ahead. If
you're going to throw your own exceptions then you simply use your own
codes.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679356(v=vs.85).as
px