U++ framework
Do not panic. Ask here before giving up.

Home » U++ TheIDE » U++ TheIDE: Compiling, Linking, Debugging of your packages » Problems debugging with Visual C++
Re: Problems debugging with Visual C++ [message #43661 is a reply to message #43660] Thu, 18 September 2014 12:55 Go to previous messageGo to previous message
mirek is currently offline  mirek
Messages: 14291
Registered: November 2005
Ultimate Member
Interesting. May I ask for more logs?

uint64 Pdb::GetCpuRegister(const Context& ctx, int sym)
{
	int q = GetRegisterList().Find(sym);
	RLOG("== GetCpuRegister =========");
	RDUMP(sym);
	RDUMP(q);
	if(q < 0)
		return 0;
	const CpuRegister& r = GetRegisterList()[q];
	RDUMP(r.name);
	RDUMP(r.kind);
	RDUMP(r.sym);
#ifdef CPU_64
	uint64 val = win64 ? GetRegister64(ctx, sym) : GetRegister32(ctx, sym);
#else
	uint64 val = GetRegister32(ctx, sym);
#endif
	RDUMP(Format64Hex(val));
	switch(r.kind) {
	case REG_L:
		return LOBYTE(val);
	case REG_H:
		return HIBYTE(val);
	case REG_X:
		return LOWORD(val);
	case REG_E:
		return LODWORD(val);
	}
	return val;
}


BOOL CALLBACK Pdb::EnumLocals(PSYMBOL_INFO pSym, ULONG SymbolSize, PVOID UserContext)
{
	LocalsCtx& c = *(LocalsCtx *)UserContext;

	if(pSym->Tag == SymTagFunction)
		return TRUE;

	RLOG("=== EnumLocals ========");
	RDUMP(UserContext);
	RDUMP(c.context);
	RDUMP(pSym->Register);
	Val& v = (pSym->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER ? c.param : c.local).GetAdd(pSym->Name);
	v.address = (adr_t)pSym->Address;
	if(pSym->Flags & IMAGEHLP_SYMBOL_INFO_REGISTER)
		v.address = pSym->Register;
	else
	if(pSym->Flags & IMAGEHLP_SYMBOL_INFO_REGRELATIVE) {
		if(pSym->Register == CV_ALLREG_VFRAME) {
		#ifdef CPU_64
			if(c.pdb->win64)
				v.address += c.pdb->GetCpuRegister(*c.context, CV_AMD64_RBP);
			else
		#endif
				v.address += (adr_t)c.pdb->GetCpuRegister(*c.context, CV_REG_EBP);
		}
		else
			v.address += (adr_t)c.pdb->GetCpuRegister(*c.context, pSym->Register);
	}
	else
	if(pSym->Flags & IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE)
		v.address += c.frame;
	c.pdb->TypeVal(v, pSym->TypeIndex, (adr_t)pSym->ModBase);
	LLOG("LOCAL " << pSym->Name << ": " << Format64Hex(v.address));
	return TRUE;
}


Thanks a lot, I feel we are really very close now.

Mirek

[Updated on: Thu, 18 September 2014 12:56]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Debugger support for enum values would be nice
Next Topic: Need help compiling UPP tarball on Linux Mint 17 Qiana
Goto Forum:
  


Current Time: Thu Oct 01 07:30:54 GMT+2 2026

Total time taken to generate the page: 0.01114 seconds