2012-11-27 20 views
6

Mam C++ kod, który oczekuje, że to wiersz polecenia, aby wyglądać tak:Eclipse & cytuje argumenty wiersza poleceń?

/ścieżka/do/exe -p: ParameterName = "[/ ścieżka/a/file /,/ścieżka/do/inna/plik] "

w tym cudzysłowy. Mogą to być pojedyncze lub podwójne cudzysłowy, ale muszą tam być. W Eclipse, jeśli ustawię argumenty wiersza poleceń (Debuguj konfiguracje/Argumenty) i wpisz powyższą opcję wiersza poleceń (minus/ścieżka/do/exe) Eclipse spożywa cytaty. Ponieważ używam tego w Linuksie, nawiasy kwadratowe dają żal skorupy i nigdy nie wchodzą do mojego kodu.

Jeśli skonfigurować wiersz poleceń args tak:

"To jest cytowany"

argv [1] wygląda następująco:

ten jest cytowany

czyli bez cudzysłowów . Jeśli skonfigurować wiersz polecenia w następujący sposób:

\ „to jest cytowany \”

uzyskać:

argv[1]: "this 
argv[2]: is 
argv[3]: quoted" 

jeśli staram się umieścić w nawiasach kwadratowych w to sięga dając muszlę żal, nawet jeśli staram się im uciec:

\"\[this is quoted\]\" 

jak powiedzieć Eclipse wziąć moje argumenty wiersza poleceń dokładnie jak już wszedł je?

Dzięki

Odpowiedz

0

Czy już próbować

"\"\[this is quoted\]\"" 

?

BTW: To nie jest problem z zaćmieniem, ale odzwierciedla zachowanie powłoki.

+0

Nie miałem, ale właśnie zrobiłem. Dobra próba, ale nadal nie jestem tym, za czym jestem. Zauważyłem, że w oknie konsoli "gdb ślady" pokazuje mi rozmowę Eclipse z gdb i tam widzę, że wydało to polecenie: –

+0

(Przepraszam - moja zmiana została przerwana)
Nie miałem, ale właśnie zrobiłem. Dobra próba, ale nadal nie jestem tym, za czym jestem. Zauważyłem, że w oknie "gdb trace" Console pokazuje mi rozmowę Eclipse z gdb i tam widzę, jak wydobywa "set args" \ "\\ [to jest cytowane \\] \" ". Rozumiem, że powłoka interpretuje nawiasy bez znaków ucieczki, ale to Eclipse zmienia to, co powiedziałem, aby użyć jako wiersza poleceń. Jeśli wprowadzę ten sam tekst na prawdziwym wierszu poleceń, działa on zgodnie z oczekiwaniami - bez cudzysłowów w argv, ale nawiasy są niezmienione. –

+1

@ g-makulik: Wierzę, że to jest problem zaćmienia/CDT. Wpadłem na ten problem w Linuksie GTK i Eclipse Indigo. Podwójne cudzysłowy wokół argumentów programu ze spacjami wprowadzonymi do zakładki argumentów konfiguracji debugowania CDT nie są poprawnie ustawione przez eclipse/MI, gdy set-args przez gdb. Musisz używać pojedynczych cudzysłowów. Ponadto jest tu wątek, który mówi, że nawet to nie działa w systemie Windows: http://www.eclipse.org/forums/index.php/t/175270/ Otrzymuję poprawne zachowanie, uruchamiając program z powłoki Bash, ale nie z Zrzut ekranu debugowania zaćmienia. – timblaktu

2

I think Znalazłem rozwiązanie - przynajmniej to zadziałało już kilka razy z rzędu. W zakładce Argumenty Eclipse w „argumenty programu” pole wpisać parametr wiersza polecenia w następujący sposób:

-p:parameterName="'[foo,bar]'" 

ta zamienia się:

-p:parameterName='[foo,bar]' 

w komendzie GDB za „set args”. Kończę się pojedynczymi cytatami wokół wyrazu nawias kwadratowy, ale to jest w porządku dla mojej aplikacji. Nie wiem, dlaczego to działa (chciałbym, żeby tak było) lub dlaczego inne sposoby ucieczki od tekstu nie powiodły się.

Kolejność podwójnych pojedynczych cudzysłowów & ma znaczenie. Jeśli próbujesz wstawić pojedyncze cudzysłowy na zewnątrz, staje się przekształcany w nieudany. Nie jestem pewien, co zrobiłbym, gdyby podwójne cudzysłowy były wymagane.

+0

Wielkie dzięki, które były * naprawdę * pomocne. –

2

Naprawiłem to, więc teraz istnieją jasne zasady dostarczania argumentów. Można przeczytać o tym w szczegółach tutaj:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=474648

Główne zasady są takie, że uruchamiania i debugowania mają zachowywać się tak samo, argumenty są przede wszystkim to, co jest odbierane przez program i nie bash, oraz zasady, jak dostarczanie argumentów musi być proste i intuicyjne. Niemożliwe jest całkowite uniknięcie reguł, ponieważ w przypadku przekazywania pojedynczego ciągu znaków, gdzie kończy się każdy argument, pewne specjalne oznaczenie jest nieuniknione.

Więc argumenty działa w następujący sposób:

  • Dowolny znak po backslash jest traktowane dosłownie i traci szczególne znaczenie.

  • Dowolny znak po cudzysłowie i przed następnym dopasowanym cytatem (lub EOF) jest traktowany dosłownie i traci specjalne znaczenie (zarówno pojedyncze, jak i podwójne).

  • Spacja biała (o ile nie jest zmieniona ani nie zawiera cudzysłowów) jest używana jako ogranicznik argumentów.

Poprzedni zachowanie było dość dużo niezdefiniowane jako coś `date` będzie subbed przez bash i jeszcze zachowanie nie zawsze była identyczna z bash. Może to zrujnować niektórym użytkownikom zhakowskie konfiguracje, ale teraz przepisywanie jest banalne, podczas gdy przed właściwym łańcuchem trzeba było znaleźć próbę i błąd z różnymi kombinacjami cytowania, "czy potrzebuję jednego, dwóch lub czterech ukośników?".

+0

Chcielibyśmy, aby teraz, The nightly CDT dodać pojedyncze Cytaty wokół każdego parametru. Argumenty konfiguracji debugowania zawierają A B C w ARGV i znaleziono "A" B "C". ? – Gabor

Powiązane problemy