Worldserver Runtime Error

12/29/2014 02:57 Terrat#1
Hey ho,
kriege immer beim Worldserver
(beim Debuggen kriege ich leider nichts raus
5 GB Ram sind auch noch Frei und CPU auch nur auf 5% weiß nicht woran das iegen kann.
)
[Only registered and activated users can see links. Click Here To Register...]
12/29/2014 04:04 Wanetrain#2
Wie wäre es mit mehr Infos?

VS? Derzeitiger RAM? Derzeitige CPU Verbrauch? BlaBla das braucht man alles.

Runtime Error's können durch vieles entstehen.

Ps: 5GB Frei oder nicht, fürn Arsch, dein Root/PC kann 64 haben, juckt nicht.
12/29/2014 07:29 xTwiLightx#3
Debuggen, my dear.
12/29/2014 21:21 Terrat#4
An der Performance kann es nicht liegen.

Hier crasht es:
[Only registered and activated users can see links. Click Here To Register...]
Code:
DPDatabaseClient.cpp(1755) : atlTraceGeneral - 1340, (4824, 8761, 4836, 8772)
dwFlag=0xcdcdcdcd, nId=531, nFlag=-2147483648dwFlag=0xcdcdcdcd, nId=-842150451, nFlag=-842150451dwFlag=0xcdcdcdcd, nId=-842150451, nFlag=-842150451CDPDatabaseClient.OnLordAusnahme (erste Chance) bei 0x75CCB727 in WorldServer.exe: Microsoft C++-Ausnahme: CMemoryException bei Speicherort 0x056EBCB4.
Unbehandelte Ausnahme bei 0x75CCB727 in WorldServer.exe: Microsoft C++-Ausnahme: CMemoryException bei Speicherort 0x056EBCB4.
Code:
void CDPDatabaseClient::UserMessageHandler( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom )
{
	CAr ar( (LPBYTE)lpMsg + sizeof(DPID) + sizeof(DPID), dwMsgSize - ( sizeof(DPID) + sizeof(DPID) ) );
	GETTYPE( ar );

	static map<DWORD, CString> mapstrProfile;
	map<DWORD, CString>::iterator it = mapstrProfile.find( dw );
	if( it == mapstrProfile.end() )
	{
		CString strTemp;
		strTemp.Format("CDPDatabaseClient::UserMessageHandler(0x%08x)", dw );
		it = mapstrProfile.insert( make_pair( dw, strTemp ) ).first;
	}
	_PROFILE( it->second );

	void ( theClass::*pfn )( theParameters )	=	GetHandler( dw );
	
	if( pfn ) 
		( this->*( pfn ) )( ar, *(UNALIGNED LPDPID)lpMsg, *(UNALIGNED LPDPID)( (LPBYTE)lpMsg + sizeof(DPID) ) );
	else 
		Error( "Handler not found(%08x)\n",dw );
}
Quote:
Originally Posted by Wanetrain View Post
Wie wäre es mit mehr Infos?

VS? Derzeitiger RAM? Derzeitige CPU Verbrauch? BlaBla das braucht man alles.

Runtime Error's können durch vieles entstehen.

Ps: 5GB Frei oder nicht, fürn Arsch, dein Root/PC kann 64 haben, juckt nicht.
Root auslastung ?
Cpu 1%
Ram 14 GB frei nachdem crash
Cpu 0%
12/30/2014 00:30 Kiseku#5
kA ob es dir hilft aber bei einem anderen Server war das mal das es wegen ihrem Madrigal gecrasht ist sobald man rein ist -> Crash
Lg :D
12/30/2014 00:34 Terrat#6
Leider nicht.
12/30/2014 14:23 Wanetrain#7
Quote:
void CDPDatabaseClient::UserMessageHandler( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom )
{
CAr ar( ( LPBYTE )lpMsg + 8, dwMsgSize - 8 );

DWORD dwPacket = NULL;
ar >> dwPacket;

void ( theClass::*pfn )( theParameters ) = GetHandler( dw );

if( pfn )
( this->*( pfn ) )( ar, *( UNALIGNED LPDPID )lpMsg, *( UNALIGNED LPDPID )( ( LPBYTE )lpMsg + 4 ) );
else
Error( "[%s]Packet not found(%08x)\n", __FUNCTION__, dw );
}
Ändern, normal ist das mit dem Profiler ja nicht.

So wie ich das gerade sehe nutzt du VS 2013 standart, heißt daher kommen deine Probleme, ich hab euch ja gewarnt. :D
12/30/2014 18:05 Terrat#8
GetHandler( dw );
? Was ist dw ist bei mir nicht definiert.
12/30/2014 20:34 Мentus#9
Quote:
Originally Posted by Dreamsläps View Post
GetHandler( dw );
? Was ist dw ist bei mir nicht definiert.
PHP Code:
#define GETTYPE(ar)        \
    
DWORD dw;    \
    
ar >> dw
Die Variable "dw" ist im Makro GETTYPE definiert. (DPMng.h)

Wenn du Runtime-Errors bekommt, schau dir an was du geändert hast. Irgendwo muss der Fehler an deinen Änderungen liegen.
12/30/2014 22:16 Terrat#10
Quote:
Originally Posted by Мentus View Post
PHP Code:
#define GETTYPE(ar)        \
    
DWORD dw;    \
    
ar >> dw
Die Variable "dw" ist im Makro GETTYPE definiert. (DPMng.h)

Wenn du Runtime-Errors bekommt, schau dir an was du geändert hast. Irgendwo muss der Fehler an deinen Änderungen liegen.


PHP Code:
void CDPSrvr::UserMessageHandlerLPDPMSG_GENERIC lpMsgDWORD dwMsgSizeDPID idFrom )
{
    
LPBYTE lpBuffer        = (LPBYTE)lpMsg sizeof(DPID);
    
u_long uBufSize        dwMsgSize sizeof(DPID);

    
CAr arlpBufferuBufSize );
    
GETTYPEar )

    
void theClass::*pfn )( theParameters )    =    GetHandlerdw );

    if( 
pfn 
    {
        ( 
this->*( pfn ) )( aridFrom, *(UNALIGNED LPDPID)lpMsglpBufferuBufSize );
    }

[Only registered and activated users can see links. Click Here To Register...]
12/31/2014 05:27 Мentus#11
Quote:
Originally Posted by Dreamsläps View Post
[Only registered and activated users can see links. Click Here To Register...]
Hatte mich in der Klasse geirrt, mein Fehler.

PHP Code:
void CDPDatabaseClient::UserMessageHandlerLPDPMSG_GENERIC lpMsgDWORD dwMsgSizeDPID idFrom )
{
    
CAr ar( (LPBYTE)lpMsg sizeof(DPID) + sizeof(DPID), dwMsgSize - ( sizeof(DPID) + sizeof(DPID) ) );
    
GETTYPEar );
    
void theClass::*pfn )( theParameters )    =    GetHandlerdw );
    
    if( 
pfn 
        ( 
this->*( pfn ) )( ar, *(UNALIGNED LPDPID)lpMsg, *(UNALIGNED LPDPID)( (LPBYTE)lpMsg sizeof(DPID) ) );
    else 
        
Error"Handler not found(%08x)\n",dw );

Falls es nicht hilft, setz doch mal Breakpoints und schau dir an welche Werte nicht valide sind.
12/31/2014 10:51 Terrat#12
Werde nachherr testen