Quiero grabar operaciones de sincronización, como bloqueos, sempahores, barreras de una aplicación multiproceso, para poder reproducir la aplicación grabada más adelante, con el fin de depurar.¿Cómo puedo reproducir una aplicación multiproceso?
En camino es para proporcionar su propio bloqueo, sempaphore, variables de condición, etc. funciones que también hacen el registro, pero creo que es una exageración, porque abajo deben estar utilizando algunas operaciones de sincronización comunes.
Así que mi pregunta es qué operaciones de sincronización debo registrar para que requiera modificaciones mínimas en mi programa. En otras palabras, ¿cuáles son las funciones o macros en glibc y las llamadas al sistema sobre las cuales se crean todas estas operaciones de sincronización? Para que solo los modifique para el registro y la reproducción.
¿Cómo la grabación de todas las operaciones de sincronización le permitirá "reproducir la aplicación grabada"? Hay mucho más en un programa que el orden de las operaciones de sincronización, especialmente si hay condiciones de carrera debido a la falta de sincronización (que es también el tipo de problema por el que imagino que desearía tener ayuda para la depuración). –
Por el momento, olvídate de las condiciones de carrera. Sé que también son importantes. – pythonic
['strace (1)'] (http://linux.die.net/man/1/strace) podría ser útil, pero no detectará las operaciones de sincronización que ocurren completamente en el espacio de usuario sin hacer la transición al kernel, tales como bloqueos mutex no impugnados –