Masquer la trace de l’impression dans le shell

J’ai un programme où j’injecte un défaut et je m’attends à ce que cela cause un problème de segmentation. Le problème auquel je suis confronté est que pour une faute telle que:

char *str = malloc(sizeof(char)*10); free(str+1); 

J’ai le suivant imprimé dans le shell:

 *** Error in `./tests': free(): invalid pointer: 0x0000000002442574 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x80996)[0x2abd5ff5b996] ./tests[0x401558] ./tests[0x401735] ./tests[0x402211] ./tests[0x402c1b] ./tests[0x4013fd] ./tests[0x4014a2] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x2abd5fefcde5] ./tests[0x4011c9] ======= Memory map: ======== 00400000-00407000 r-xp 00000000 08:05 13109176 /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests 00606000-00607000 r--p 00006000 08:05 13109176 /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests 00607000-00608000 rw-p 00007000 08:05 13109176 /home/jay/Desktop/Mutate/Mutate/CMeanQueue-master/tests 00608000-0060a000 rw-p 00000000 00:00 0 02440000-02461000 rw-p 00000000 00:00 0 [heap] 2abd5fcb7000-2abd5fcd8000 r-xp 00000000 08:05 11274438 /lib64/ld-2.17.so 2abd5fcd8000-2abd5fcdb000 rw-p 00000000 00:00 0 2abd5fcef000-2abd5fcf2000 rw-p 00000000 00:00 0 2abd5fed8000-2abd5fed9000 r--p 00021000 08:05 11274438 /lib64/ld-2.17.so 2abd5fed9000-2abd5fedb000 rw-p 00022000 08:05 11274438 /lib64/ld-2.17.so 2abd5fedb000-2abd60098000 r-xp 00000000 08:05 6164261 /lib/x86_64-linux-gnu/libc-2.17.so 2abd60098000-2abd60298000 ---p 001bd000 08:05 6164261 /lib/x86_64-linux-gnu/libc-2.17.so 2abd60298000-2abd6029c000 r--p 001bd000 08:05 6164261 /lib/x86_64-linux-gnu/libc-2.17.so 2abd6029c000-2abd6029e000 rw-p 001c1000 08:05 6164261 /lib/x86_64-linux-gnu/libc-2.17.so 2abd6029e000-2abd602a3000 rw-p 00000000 00:00 0 2abd602a3000-2abd602b8000 r-xp 00000000 08:05 6160389 /lib/x86_64-linux-gnu/libgcc_s.so.1 2abd602b8000-2abd604b7000 ---p 00015000 08:05 6160389 /lib/x86_64-linux-gnu/libgcc_s.so.1 2abd604b7000-2abd604b8000 r--p 00014000 08:05 6160389 /lib/x86_64-linux-gnu/libgcc_s.so.1 2abd604b8000-2abd604b9000 rw-p 00015000 08:05 6160389 /lib/x86_64-linux-gnu/libgcc_s.so.1 7fffee8c6000-7fffee8e7000 rw-p 00000000 00:00 0 [stack] 7fffee993000-7fffee995000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 

Maintenant, ce que je cherche à faire, c’est de le masquer depuis l’écran, car je fais un outil d’injection de pannes, je suis conscient de ce qui se passe et je ne veux pas qu’une telle sortie ruine l’interface graphique de l’utilisateur. J’ai essayé de redirect le stderror vers le fichier 2) changez illimité à 0 et rien ne fonctionne.

NOTE: J’injecte ce problème dans un code moi-même, par conséquent, ne suggère pas de corriger l’erreur. Mon but est de cacher cela à l’impression sur le shell.

Merci

Résolu pour l’exemple ci-dessus en utilisant:

 #export MALLOC_CHECK_=0 

http://kb.parallels.com/fr/4611

Essayez de modifier le niveau de journalisation de votre kernel pour limiter ce qu’il imprime.

quelque chose comme:

 bash$ echo "0 0 0 0" > /proc/sys/kernel/printk 

Excellente écriture ici: Modifier le niveau de journalisation de la console par défaut pendant le démarrage