GDB se plaint de la relance manquante.c

Je reçois une erreur agaçante chaque fois que gdb intercepte une exception. J’ai couru le programme d’exemple suivant

#include  int main() { throw std::invalid_argument(""); return 0; } 

Et le résultat de l’exécution de gdb est

 terminate called after throwing an instance of 'std::invalid_argument' what(): Program received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. 

Ce n’est pas si grave, car je reçois les informations dont j’ai besoin, cela me dérange …

Est-ce que quelqu’un sait comment résoudre ce problème?

Pour effectuer le débogage complet du code source de la bibliothèque C sur Ubuntu, vous devez:

1) installez la version debuginfo de libc6.

Il est probablement déjà installé, mais dans le cas contraire, lancez sudo apt install libc6-dbg .

2) téléchargez le code source correspondant à la version installée de la bibliothèque C.

Commencez par créer un répertoire n’importe où. J’utiliserai /opt/src ici. Ensuite, procédez comme suit:

 sudo apt install dpkg-dev cd /opt/src apt source libc6 find $PWD -maxdepth 1 -type d -name 'glibc*' 

Rappelez-vous ce nom – ce sera quelque chose comme /opt/src/glibc-2.23

Maintenant, lancez gdb, lancez votre programme jusqu’à ce qu’il s’arrête, et à l’invite de gdb, procédez comme suit:

 (gdb) info source Current source file is ../sysdeps/unix/sysv/linux/raise.c Compilation directory is /build/glibc-KM3i_a/glibc-2.23/signal 

Donc, gdb s’attend à ce que le code source se trouve dans un répertoire différent de celui où nous l’avons mis. Il y a deux façons de résoudre ce problème:

a) déplacez ou utilisez un lien symbolique pour que le code source soit (ou semble être) dans /build/glibc-KM3i_a/glibc-2.23 .

b) indiquez à gdb comment remplacer le chemin correct du répertoire source:

  (gdb) set substitute-path /build/glibc-KM3i_a/glibc-2.23 /opt/src/glibc-2.23 

Maintenant, revenez à votre cadre, et gdb devrait afficher la ligne de code source:

 (gdb) frame 1 #1 0xb7e2fea9 in __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:54 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);