Je souhaite utiliser clone pour consigner l'état actuel de mon programme. Il a beaucoup de boucles et je veux garder une trace du processus sans imprimer l'état dans chaque itération de la boucle.en utilisant clone(): erreur de segmentation
Voilà pourquoi j'ai créé cette preuve de concept:
#include <iostream>
#include <cstdlib>
unsigned int i;
int log(void*) {
std::cout << "LOGGING START" << std::endl;
while(true) {
sleep(1);
std::cout << i << std::endl;
}
}
int main() {
void **child_stack = (void**)malloc(16384);
i = 0;
std::clog << "calling clone" << std::endl;
clone(log, child_stack, CLONE_VM | CLONE_FILES, NULL);
std::clog << "done" << std::endl;
while(true) {
++i;
}
return 0;
}
Quand je lance sans gdb il se bloque avec une erreur de segmentation au clone() mais il fonctionne très bien si j'utilise gdb. Pourquoi?
Pensez-vous que c'est une bonne pratique ou vais-je rencontrer des problèmes tôt ou tard? Et y a-t-il une meilleure méthode pour y parvenir?
Cheers,
Manuel
pthreads est également plus portable; 'clone' est spécifique à Linux. –
Ok, mais alors je devrais créer un mutex et le verrouiller au début de l'itération de la boucle for et le débloquer à la fin? Si oui, cela je pense que cela nuirait à la performance. – Manuel
J'ai essayé de l'utiliser, mais la performance se décompose vraiment fortement. Y a-t-il une autre solution? – Manuel