Ist der Visual Compiler behindert?

RuFFnEcK

Erfahrenes Mitglied
Hallo zusammen,

wieder ich ;)
Ich hab echt das gefühl dass der Compiler so richtig behindert ist.
Ich frag mich wozu initialisiere ich mit 0 wenn er drauf scheisst?
Warum mach ich zuweisung wenn er die nicht übernimmt?
Wofür schreib ich Code wenn er es eh weg "optimiert" ?

Anfangs hatte ich das Problem dass er gar nicht mal in die Funktion GenerateTelegram() gesprungen ist,
aber das lag an der Optimierungsoption, da die Funktion nur Membervariablen manipuliert hat die nicht weiter verwendet wurden, wurde diese Fkt weg optimiert...
Optimierung ausgeschaltet -> wenigstens ruft er die Fkt. auf...
ABER:
Wenn es zum aufruf von generateTelegram() kommt stehen irgendwelche Werte im Array, obwohl im Moment des C´tor aufrufs alles auf 0x00 steht.
Und er ignoriert manche Zuweisungen ganz, ich kann nicht mal brechpunkte setzen...
Und die Zuweisungen wo cih noch brechpunkte setzen kann wo er auch anhält, passiert trotzdem nix, es wird zum verrecken nicht ins Array geschrieben *heul*

Erstmal n bisle Code:

Ich hab diese Klasse:
Code:
class CCommunication
{

public:
	CCommunication(void);
	~CCommunication(void);
private:		

	BYTE m_aSendBuf[_PEBUS_ARRAY_SIZE];
	BYTE m_aRecBuf[_PEBUS_ARRAY_SIZE];
		bool			GenerateTelegramm(BYTE dwClientAddress, CDevice* pDevice, CommCommands cmd, CString varName);

        void InitializeVars(void);
.
.
.usw.
Der C´tor:
Code:
CCommunication::CCommunication(void) :

		eStatus(StartUp),
		m_pIComm(NULL)
{
	InitializeVars();
}
Die Methoden:
Code:
bool CCommunication::GenerateTelegramm(BYTE dwClientAddress, CDevice* pDevice, CommCommands cmd, CString varName)
{
	bool returnValue = true;
	std::vector<int>::size_type indexOfVar = -1;
	if(!varName.IsEmpty())
		 indexOfVar = pDevice->GetIndexOfVar(varName);
	/*			
																// Pos   
	m_aSendBuf[0]		= dwClientAddress;						// 0	src	
	m_aSendBuf[1]		= pDevice->GetAddress();				// 1	dst
	m_aSendBuf[2]		= PT_queryMasterSlave;					// 2	pt Always send as Master-Slave telegram
	m_aSendBuf[3]		= PLEN;									// 3	dlen
    m_aSendBuf[4]		= QQ;									//  data  |
    m_aSendBuf[5]		= ZZ;									//		 \ /
*/
	m_aSendBuf[0]		= 0x04;						// 0	src	
	m_aSendBuf[1]		= 0x02;				// 1	dst
	m_aSendBuf[2]		= 0x13;					// 2	pt Always send as Master-Slave telegram
	m_aSendBuf[3]		= 0x0D;									// 3	dlen
    m_aSendBuf[4]		= 0x00;									//  data  |
    m_aSendBuf[5]		= 0x00;	
	switch (cmd)
    {
		case cmdSwVersion:
        {
			m_aSendBuf[3] = 0x06;
            m_aSendBuf[6] = 0xB5;
            m_aSendBuf[7] = 0x09;
            m_aSendBuf[8] = 0x01;
            m_aSendBuf[9] = 0x28;
            break;
        }
		default:
        {
            returnValue = false;
		}
	}            
	return returnValue;
}

//----------------------------------------------------
void CCommunication::InitializeVars(void)
{

	for(int i(0); i < _PEBUS_ARRAY_SIZE; i++)
	{
		m_aSendBuf[i] = 0x00;
		m_aRecBuf[i]  = 0x00;
	}
}

Es ist einfach zum heulen, das kann doch nicht sein!
Hab gedacht es lag viell. an den Zuweisung, Probleme mit konvertierungen oder ähnliches und hab dann explizit Werte zugewiesen...
Aber nix ist, er t komplett drauf, amcht einfach gar nix mit dem Array.
Hab solche Aggressionen aufgebaut hier das ist unglaublich, such grad nach jemanden den ich verantwortlich machen kann *g*
Kennt jemand die Entwickler von M$ Visual Studio compilern
Maaaan

Hiiiilfe und danke im Vorraus.
 
Ich muss mich korrigieren,
nicht der Compiler ist behindert sondern der debugging modus...

Ich hab jetzt nix drum gegeben was unter Überwachung im Array steht und dass die Zuweisungen nichts bewirkt haben und hab einfach weiter gemacht und das ganze verschickt...
Und siehe da die Daten kommen doch richtig auf dem Bus an, nur das schwule Überwachungsfenster zeigt mir schrott an.
AAAAAAhrg das kann doch net sein, hab getz den ganzen Tag daran verbracht den fehler zu finden...
NUR IST DA GAR KEINER
Wie kann man denn unter soner Umgebung auf dauer erfolgreich entwickeln?
Ist das unter 2005 noch genauso?
Unglaublich...traue nichts und niemandem...
 
Ich muß sagen, daß ich solche Probleme mit dem VS6 noch nie hatte. Es stürzt zwar manchmal grundlos beim Kompilieren ab, aber beim Debuggen ging bisher alles. Spätestens nachdem ich alles komplett neu kompiliert hatte. Sonst kann es vorkommen, daß er manche Variablen nicht im Watch-Fenster anzeigen kann. Bist Du sicher, das Du im Debug-Modus alle Optimierungen ausgeschaltet hast?
 
:D

Nein bin ich nicht^^

Hab jetzt alles ausgeschaltet und tja was soll ich sagen alles so wie es sollte und
ich mir das vorstelle und von Borland auch kenne ;)
Ich wusste nicht dass geschwindigkeit optimieren bedeutet dass er Zuweisungen nicht ausführt
und im debug Fenster die zugewiesenen Werte nicht anzeigt.

Aber es gibt immer was zu lernen ;)

Grüße RuFF
 
Debug und Optimierung sollten NIE zusammen aktiviert sein. Wie du gemerkt hast, wird bei Optimierung einiges verändert oder ganz weggelassen. Das merkt man dann ganz toll beim Debuggen, wenn Zeilen nicht angesprungen/übersprungen werden oder Variablenanzeigen nicht so laufen wie sie eigentlich sollten.
Hat einen Höllenspass gemacht, bis ich das bei meinen von einem selbstgebastelten Appwizard erstellten Programmen gemerkt habe, dass bei Debug keine Debug-Informationen generiert wurden.
 
Wenn mans einmal weiß und alles abgestellt hat ist der Compiler eigentlich gar net schlecht :D
Tja es sind meißt die Benutzer und nicht die Programme^^

Aber spontane abstürze hab ich auch ab und zu mal, wenn ich mich z.B. an nen Prozess dran hängen will.
Darum immer regelmäßig auf alles Speichern klicken *g*

grüße
RuFF
 
Zurück