2012-03-12 6 views
7

Mam program, który chciałbym debugować z gdb poprzez emacs. W celu uruchomienia wersji rozwojowych tego programu, mam skrypt powłoki, który mogę pobrać, który ustawia środowisko wywołujące, aby zobaczyć odpowiednie biblioteki, itp. Czego nie mogę rozwiązać, to jak poprosić emacs/gud, aby to źródło plik przed uruchomieniem gdb.Ustawianie środowiska gdb podczas uruchamiania go przez emacs

Próbowałem użyć polecenia takiego jak "source env.sourceme & & gdb my_program", ale emacs skarży się, że nie wie, co oznacza "źródło". Domyślam się, że to nie działa gdb w powłoce, więc tego rodzaju sztuczki nie zadziałają.

Jak mogę przekonać gud/emacs/cokolwiek do uruchomienia gdb w moim niestandardowym środowisku? Mam gotowe rozwiązanie, ale wydaje mi się, że muszę czegoś przegapić.

Odpowiedz

3

Jakie jest twoje hacky rozwiązanie?

Dlaczego po prostu nie masz skryptu wrapper, który źródła env.sourceme, a następnie uruchomić gdb?

#!/usr/bin/env bash 

source env.sourceme 
gdb -i=mi $1 
+0

To jest zasadniczo moje "hacky rozwiązanie";) Jest to w rzeczywistości bardziej ogólny cel, ponieważ będzie uruchamiał dowolne polecenie (przez '$ *), ale w duchu. Sądzę, że jestem zaskoczony, że nie jest prostą rzeczą, aby uzyskać GUD do źródła pliku dla mnie ... – abingham

3

Można modyfikować środowisko Emacs korzystając setenv, albo interaktywnie (M-x setenv) lub programowo:

(setenv "FOOBAR" "whatever") 

Po uruchomieniu gud-gdb, cokolwiek ustawić za pomocą setenv zostaną przekazane do procesu gdb.

+0

Chyba powinienem wyjaśnić. Chciałbym wykorzystać istniejący skrypt powłoki (który jest generowany przez kompilację i dlatego jest stosunkowo wygodny), zamiast duplikować jego funkcjonalność ze względu na emacs. W każdym razie nie chcę zmieniać zmiennej środowiskowej dla całego procesu emacs, tylko dla podprocesu gdb. – abingham

5

gdb ma własną składnię setting environment variables:

set environment varname [=value] 

Zamiast skryptu powłoki, napisać swoje definicji zmiennych w pliku przy użyciu powyższej składni, a następnie source plik z działającej sesji gdb. Zauważ, że nie jest to wbudowane polecenie bash, ale gdb's own, więc naturalnie zmienne definicje zmiennych środowiska nie będą działać.

+1

Podobnie jak w moim komentarzu do poprzedniej odpowiedzi, chciałbym wykorzystać moją istniejącą infrastrukturę zamiast pisać jeszcze więcej kodu do uspokoić gdb. – abingham

+0

Działa to dla mnie, jeśli umieściłem listę plików "set environment varname [= value]" w pliku, a następnie uruchom 'plik źródłowy' w emacs gdb. – 719016

+0

@ 200508519211022689616937 Och, dobrze, ponieważ to jest dokładnie to, co napisałem w mojej odpowiedzi :-) [Emacs gud-gdb po prostu uruchamia gdb.] – Thomas