2017-04-11 1 views
0

Jedes Mal, wenn ich versuche, etwas in GDB zu laufen, ich mit der folgenden Fehlermeldung erfüllt bin:GDB hält meine SHELL auf die aktuellen ausführbare Zurücksetzen

Error: No such file or directory 
During startup program exited with code 127. 

Suche um auf hier, fand ich heraus, dass dies auftreten kann Wenn die SHELL-Variable nicht richtig gesetzt ist, löst und in der Tat export SHELL=/bin/bash --login vor dem Ausführen von GDB das Problem für die aktuelle Sitzung.

Dies ist jedoch trotz der Tatsache, echo $SHELL spuckt den gewünschten Wert bereits aus. Wenn ich auf Befehl näher betrachten GDB auszuführen versucht, in der Regel sie die Form annimmt:

/path/to/mybin -c exec /path/to/mybin --my --opts 

statt

$SHELL -c exec /path/to/mybin --my --opts 

Das heißt, irgendwie GDB setzt SHELL um zu zeigen, was auch immer ausführbare ich vorbei es bevor es zu laufen beginnt. (Ich verwende das Format gdb --args /path/to/mybin --my --opts, um GDB zu starten.) Vor und nach dem Lauf hat SHELL den richtigen Wert. Wenn ich versuche, drei verschiedene ausführbare Dateien hintereinander zu debuggen, wird jede dieser drei ausführbaren Dateien als eigene Shell verwendet, was offensichtlich zu Fehlern führt. Wenn ich einmal einmal export SHELL=(acceptable shell) ausführen, wird es für den Rest der Sitzung ordnungsgemäß funktionieren.

Keine meiner Shell-dotfiles (. Bashrc,. Profil, usw.) machen keine Referenz oder Änderung der SHELL-Variable. Dieses Verhalten erscheint mir völlig unverständlich. Hat jemand eine Idee, was da vor sich geht?

Ich benutze gdb-7.7.1 in bash-4.3.11 auf Ubuntu 14.04.

EDIT: Ich war falsch über ein wichtiges Detail. Running export SHELL=/bin/bash --login korrigiert es tatsächlich nicht. Das gleiche Problem bleibt bestehen, wenn ich das tue. (Dies ist auch der Standardwert in meinem Shell und was ich sehe, wenn ich show env SHELL eingeben, wenn gdb nicht funktioniert. Allerdings export SHELL=/bin/bash Einstellung macht das Problem zu beheben, so dass der Login-Shell ist irgendwie das Problem, denke ich.

+0

Wenn die Dinge nicht richtig funktionieren, was zeigt '(gdb) env SHELL'? –

+0

Ich habe gerade meine ursprüngliche Frage bearbeitet. 'show env SHELL' druckt'/bin/bash --login' – xanderflood

Antwort

0

Die Problem ist fast sicher mit Ihrem ~/.bashrc aber es ist schwer zu erraten, was es aus Ihrer Beschreibung ist

Schritt 1:.

mv ~/.bashrc ~/.bashrc.save.20170411 

Logout und zurück in sicherzustellen, dass GDB ganz gut funktioniert

Schritt 2:

Kopieren Sie Teile von .bashrc.save.20170411 nach ~/.bashrc und wiederholen Sie den Abmelde-/Anmeldezyklus, bis GDB nicht mehr funktioniert.

Schritt 3:

Jetzt wissen Sie, Teil Probleme verursacht, und kann eine bessere Frage stellen, wenn Sie immer noch nicht verstehen, warum das Stück .bashrc problematisch ist.

+0

Ich habe meine '.bashrc',' .profile' und '.bash_profile' verschoben (und dann eine neue Shell geöffnet) und es hat sich überraschenderweise nicht gelöst das Problem.Das Ausführen von '/ bin/bash -v' zeigt, dass einige Startup-Befehle noch ausgeführt werden, aber ich bin mir nicht sicher, woher sie kommen, da ich kein'/etc/.bash * ','/etc/bash * 'oder'/etc/environment'. – xanderflood

+0

@xanderflood Haben Sie sich ausgeloggt oder öffnen Sie einfach ein neues Fenster? Schauen Sie sich auch die Werte von 'BASH_ENV' und' ENV' an (und deaktivieren Sie sie). –

Verwandte Themen