Viele Software-Fehler treten erst auf, wenn ein Programm in Echtzeit auf dem Prozessor abläuft. Um diese Fehler zu finden und zu beheben, muss der Prozessor quasi umgekrempelt werden und seine Interna preisgeben. Doch das ist bei modernen Hochleistungsprozessoren gar nicht so einfach. Eine neue Generation von Trace-Tools macht es durch Kunstgriffe trotzdem möglich.
Viele Software-Fehler treten erst auf, wenn ein Programm in Echtzeit auf dem Prozessor abläuft. Um diese Fehler zu finden und zu beheben, muss der Prozessor quasi umgekrempelt werden und seine Interna preisgeben. Doch das ist bei modernen Hochleistungsprozessoren gar nicht so einfach. Eine neue Generation von Trace-Tools macht es durch Kunstgriffe trotzdem möglich.
void BillingTimer(int i) | { | |
Time OfDay = GetSystemTimer(); | // get present time | |
WaitForSemaphore(globalsem); | // lock access to array | |
ImportantArray[i] = TimeOfDay; | // record start time | |
ReleaseSemaphore(globalsem); | // unlock access | |
DoTaskToBeTimed(); | // time the task | |
TimeOfDay = GetSystemTimer(); | // get finish time | |
WaitForSemaphore(globalsem); ImportantArray[i+1] = TimeOfDay; | // store in array | |
ReleaseSemaphore(globalsem); | ||
} | ||
Einem Programm-Code kann man entnehmen, welche Instruktionen ausgeführt werden, aber viele andere Informationen liefert er nicht, z.B. welcher Speicherbereich belegt wird, wie das Programm mit unerwarteten Daten umgeht, was im Falle eines DMA-Ereignisses passiert u.v.m. |