7
votes

Pourquoi GDB démarre-t-il une nouvelle coquille et comment désactiver ce comportement?

Je déterminais un problème dans lequel le démarrage de la demande de GDB entraîne une erreur de recherche de symboles, mais le commençant à partir de la coque fonctionne.

Il s'avère que chaque fois que vous démarrez un programme de GDB, il démarrera une nouvelle coquille et remplacera ainsi toutes les variables d'environnement que j'avais définies avant de démarrer GDB (comme ld_library_path ).

Ce n'est pas vraiment le comportement que je veux. Quelqu'un peut-il expliquer la justification de cela, ou dites-moi comment je peux éteindre ça?


0 commentaires

4 Réponses :


2
votes

Lorsque vous démarrez GDB de la coquille, vous commencez comme un nouveau processus, il n'y a aucun moyen de le faire. Dans UNIX, de nouveaux processus héritent de certains de l'environnement du parent.

Pour vous assurer qu'une variable est héritée, si vous utilisez une coque de type Bourne, essayez d'exporter celui-ci: P>

export LD_LIBRARY_PATH=...


2 commentaires

Je suppose que le problème est que l'OP définit son ld_library_path dans ~ / .bstrucrc ou quelque chose comme ça, et ce réglage écrase quoi qu'il a défini avant d'invoquer le GDB,].


Vous avez cloué, @employeRussien!



1
votes

Le débuteur ( inférieur em> dans le langage de GDB) est toujours lancé avec un environnement propre afin d'obtenir des résultats plus reproductibles. Afin de définir une variable là-bas, utilisez la commande

set env VARNAME=VALUE


1 commentaires

Si, par "Environnement propre", vous voulez dire autre chose qu'une copie de l'environnement de GDB (plus tout ce que les commandes Set env ont été exécutées), ils sont très erronés.



6
votes

Je suppose que vous inconditionnellement em> définissez ld_library_path code> dans votre ~ / .cshrc code> ou similaire. Donc, si de l'invite de shell vous faites:

export LD_LIBRARY_PATH=foo  # or for csh:
setenv LD_LIBRARY_PATH foo
$SHELL -c 'echo $LD_LIBRARY_PATH'


1 commentaires

Je viens de courir dans cette erreur exacte dans ma configuration.



3
votes

Je rencontre le même problème. Je trouve que dans Infort.h (code source de gdb gdb / inférieur.h ) Il existe un macro startup_with_shell , il existe également un commentaire comme xxx

puis je définis startup_with_shell comme 0 et décrété Start_inferior_traps_Expecté et recompilé mon GDB. Après que GDB n'ait plus commencé de shell.


1 commentaires

La GDB actuelle vous permet de le faire par: définir le démarrage-with-shell off