コード例 #1
0
ファイル: avmthaneWin.cpp プロジェクト: FlowShift/thane
		unsigned long CrashFilter(LPEXCEPTION_POINTERS pException, int exceptionCode)
		{
			unsigned long result;
			if ((result = UnhandledExceptionFilter(pException)) != EXCEPTION_EXECUTE_HANDLER)
			{
				return result;
			}
			else if (avmthane::show_error)
			{
				// if -error option dont do a dump 
				return EXCEPTION_CONTINUE_SEARCH;
			}

			AvmLog("avmplus crash: exception 0x%08lX occurred\n", exceptionCode);

			typedef BOOL (WINAPI *MINIDUMP_WRITE_DUMP)(
				HANDLE hProcess,
				DWORD ProcessId,
				HANDLE hFile,
				MINIDUMP_TYPE DumpType,
				PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
				PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
				PMINIDUMP_CALLBACK_INFORMATION CallbackParam
				);

			HMODULE hDbgHelp = LoadLibrary("dbghelp.dll");
			MINIDUMP_WRITE_DUMP MiniDumpWriteDump_ = (MINIDUMP_WRITE_DUMP)GetProcAddress(hDbgHelp, 
				"MiniDumpWriteDump");

			if (MiniDumpWriteDump_)
			{
				MINIDUMP_EXCEPTION_INFORMATION  M;
				const char DumpPath[] = "avmplusCrash.dmp";

				M.ThreadId = GetCurrentThreadId();
				M.ExceptionPointers = pException;
				M.ClientPointers = 0;

				AvmLog("Writing minidump crash log to %s\n", DumpPath);

				HANDLE hDumpFile = CreateFile(DumpPath, GENERIC_WRITE, 0, 
					NULL, CREATE_ALWAYS,
					FILE_ATTRIBUTE_NORMAL, NULL);

				MiniDumpWriteDump_(GetCurrentProcess(),
					GetCurrentProcessId(),
					hDumpFile,
					MiniDumpNormal,
					(pException) ? &M : NULL, NULL, NULL);

				CloseHandle(hDumpFile);
			}
			else
			{
				AvmLog("minidump not available, no crash log written.\n");
			}

			return result;
		}
コード例 #2
0
	void WordcodeTranslator::swprofStart()
	{
		swprof_code_fp = fopen("superwordprof_code.txt", "wb");
		if (swprof_code_fp == NULL)
			AvmLog("SUPERWORD PROFILING: COULD NOT OPEN CODE FILE.\n");
		else
		{
			unsigned int signature = 0xC0DEC0DE;
			fwrite(&signature, sizeof(uint32_t), 1, swprof_code_fp);
		}
		swprof_sample_fp = fopen("superwordprof_sample.txt", "wb");
		if (swprof_sample_fp == NULL)
			AvmLog("SUPERWORD PROFILING: COULD NOT OPEN SAMPLE FILE.\n");
		else
		{
			unsigned int signature = 0xDA1ADA1A;
			fwrite(&signature, sizeof(uint32_t), 1, swprof_sample_fp);
		}
	}
コード例 #3
0
ファイル: avmshellWin.cpp プロジェクト: bsdf/AVMPLUS_MAC
 WinPlatform()
 {
     // Increase the accuracy of getTimer and Date to 1 ms from the 16 ms default
     timeBeginPeriod(1);
     
     // Initialize WSAStartup() only once
     if( !WinSocket::Setup() ) {
         AvmLog("Failed to initialize Winsock.\n");
         printf("Failed to initialize Winsock.\n");
     }
 }
コード例 #4
0
	void WordcodeTranslator::swprofPC(const uint32_t* pc)
	{
		if (swprof_sample_fp != NULL) {
			fwrite(&pc, sizeof(uint32_t*), 1, swprof_sample_fp);
#ifdef SUPERWORD_LIMIT
			if (++sample_count == SUPERWORD_LIMIT) {
				swprofStop();
				AvmLog("SAMPLING HALTED.\n");
			}
#endif
		}
	}
コード例 #5
0
ファイル: avmshellWin.cpp プロジェクト: bsdf/AVMPLUS_MAC
        void WinPlatform::initializeLogging(const char* filename)
        {
        #if defined (UNDER_CE)
            int filenameLen = VMPI_strlen(filename);

            TCHAR* logname = new TCHAR[filenameLen+1];

            mbstowcs(logname, filename, filenameLen+1);

            _wfreopen(logname, L"w", stdout);

            delete [] logname;
        #else
            FILE *f = freopen(filename, "w", stdout);
            if (!f)
                AvmLog("freopen %s failed.\n",filename);
        #endif /* UNDER_CE */
        }