Hallo,
ich habe in meiner Anwendung einen Thread zur regelung eines Motors. Der
Thread bleibt sporadisch an verschiedenen Stellen der Switch-Case anweisung stehen (d.h. kein Suspend). Ich habe jetzt ein
try-catch Block darumgebaut erhalte jetzt im Fehlerfall einen "EAccessViolation"
von e.Message mehr nicht. Die Anwendung stürzt nicht ab aber die while-Schleife wird auch nicht mehr ausgeführt.
Zusätzlich habe ich noch #include <except.h> und mit
__ThrowExceptionName() und __ThrowLineNumber()
weiter Informationen zu bekommen. __ThrowExceptionName() liefert 0
und __ThrowLineNumber() nichts.
Wie kann ich das Problem weiter analysieren? Wer kann Helfen?
--------------------------------------------------------------------------------------
void __fastcall TMotCtl::Execute()
{
try {
while (!this->Terminated)
{
switch...
case...
...
...
} // end while
}
catch (Exception& e)
{//Da man über Synchronize keine Parameter übergeben
//kann, wird ein Datenelement ExceptionMsg verwendet.
ExceptionMsg=e.Message + " Typ: " + __ThrowExceptionName()+ IntToStr(__ThrowLineNumber()) + " : " + __ThrowFileName();
//ExceptionMsg= IntToStr(__ThrowLineNumber());
Synchronize(&ShowMyExceptionMessage);
}
catch (...)
{
ExceptionMsg="Exception ...";
Synchronize(&ShowMyExceptionMessage);
}
}
ich habe in meiner Anwendung einen Thread zur regelung eines Motors. Der
Thread bleibt sporadisch an verschiedenen Stellen der Switch-Case anweisung stehen (d.h. kein Suspend). Ich habe jetzt ein
try-catch Block darumgebaut erhalte jetzt im Fehlerfall einen "EAccessViolation"
von e.Message mehr nicht. Die Anwendung stürzt nicht ab aber die while-Schleife wird auch nicht mehr ausgeführt.
Zusätzlich habe ich noch #include <except.h> und mit
__ThrowExceptionName() und __ThrowLineNumber()
weiter Informationen zu bekommen. __ThrowExceptionName() liefert 0
und __ThrowLineNumber() nichts.
Wie kann ich das Problem weiter analysieren? Wer kann Helfen?
--------------------------------------------------------------------------------------
void __fastcall TMotCtl::Execute()
{
try {
while (!this->Terminated)
{
switch...
case...
...
...
} // end while
}
catch (Exception& e)
{//Da man über Synchronize keine Parameter übergeben
//kann, wird ein Datenelement ExceptionMsg verwendet.
ExceptionMsg=e.Message + " Typ: " + __ThrowExceptionName()+ IntToStr(__ThrowLineNumber()) + " : " + __ThrowFileName();
//ExceptionMsg= IntToStr(__ThrowLineNumber());
Synchronize(&ShowMyExceptionMessage);
}
catch (...)
{
ExceptionMsg="Exception ...";
Synchronize(&ShowMyExceptionMessage);
}
}
Comment