Esempio n. 1
0
void Demo()
{
	//函数有返回值,却没有处理
	RetFunc();
}
Esempio n. 2
0
// Stop或return时调用
int CallHookOut(ProfState *S, GlobalState* pState)
{
	if (S->level==0 || pState->HookMark==0)
		return 0;

	ProfData info;
	--S->level; // 调用栈计数减一

	info = RetFunc(S, 0);
	PauseTotalTime(S);
	info.LocalTime += pState->FuncCallTime;
	info.TotalTime += pState->FuncCallTime;
	formats(info.FileDefined);
	formats(info.FunctionName);

	// string pool满时输出

	if ( pState->BufCount < MAX_BUFFER_COUNT )
	{
		if (info.TotalTime >= 0.000001)
		{
			pState->Buffer[pState->BufCount].level        = S->level;
			pState->Buffer[pState->BufCount].FunctionName = info.FunctionName; //AllocateStringPool(pState, FuncNameLen);
			pState->Buffer[pState->BufCount].FileDefined  = info.FileDefined; //AllocateStringPool(pState, FileNameLen);
			pState->Buffer[pState->BufCount].LineDefined  = info.LineDefined;
			pState->Buffer[pState->BufCount].CurrentLine  = info.CurrentLine;
			pState->Buffer[pState->BufCount].LocalTime    = info.LocalTime;
			pState->Buffer[pState->BufCount].TotalTime    = info.TotalTime;

			++pState->BufCount;
		}
		else
		{
			free(info.FunctionName);
		}
	}
	else
	{
		FILE* FW = fopen(pState->auxs, "a");

		int i = 0;
		for ( i=0; i<MAX_BUFFER_COUNT; ++i )
		{
			output( FW, "%d\t%s\t%s\t%d\t%d\t%f\t%f\n",
				pState->Buffer[i].level,
				pState->Buffer[i].FileDefined,
				pState->Buffer[i].FunctionName,
				pState->Buffer[i].LineDefined,
				pState->Buffer[i].CurrentLine,
				pState->Buffer[i].LocalTime,
				pState->Buffer[i].TotalTime );

			free(pState->Buffer[i].FunctionName);
			pState->Buffer[i].FunctionName = NULL;
		}

		// 输出当前调用函数
		output( FW, "%d\t%s\t%s\t%d\t%d\t%f\t%f\n", S->level, info.FileDefined,
				info.FunctionName, info.LineDefined, info.CurrentLine,
				info.LocalTime, info.TotalTime);

		free(info.FunctionName);

		pState->BufCount = 0;

		fclose(FW);
	}

	// 输出信息完毕,唤醒计时
	if (S->level != 0)
		ResumeAllTime(S);

	return 1;
}