schnasseldag - 2017-11-05

Hallo,

zwei Tasks greifen auf einen per SysSem geschützten Bereich zu. Dabei friert der Debugger ein, wenn ein Breakpoint innerhalb des durch Enter() und Leave() geschützten Bereichs gesetzt wird oder per Single-Step hineindebugged wird. Nach etwa 30s erfolgt dann ein Verbindungsabbruch zum Gerät (in dem Fall ein Raspi). Läuft nur eine Task, dann kann diese einwandfrei debugged werden.
Zunächst hatte ich meinen Code im Verdacht, durch das geänderte Laufzeitverhalten des Debuggers in ein Deadlock zu laufen (aber selbst dann sollte der Debugger noch reagieren). Nachdem ich den Code bis auf wenige Zeilen eingedampfte und nun noch nicht mal mehr als eine einzige Anweisung einer Funktions-Stackvariable im kritischen Bereich steht, glaube ich an ein Debuggerproblem in Codesys (3.5SP11 Patch2).

Hier der Code:

METHOD PUBLIC GetInputPortB : bool
// Exklusiven Zugriff anfordern.
SysSemEnter(hSem := hMutex);
// **************************************************************************************************************
// Ein Breakpoint an dieser Stelle führt zum Einfrieren des Debuggers, bis die Verbindung zum Raspi verloren ist!
// **************************************************************************************************************
GetInputPortB := TRUE;
// Exklusiven Zugriff freigeben.
SysSemLeave(hSem := hMutex);

Im Anhang befindet sich das Miniprojekt.

Kennt jemand dieses Verhalten? Ist das eine bekannte Einschränkung?

Gruß

schnasseldag

Debugproblem.zip [57.48 KiB]