2012-11-27 99 views
6

我有期望它的命令行看起來像這樣一些C++代碼:Eclipse中的命令行參數?

/路徑/到/ EXE -p:參數名稱=「[/路徑/到/一個/文件/路徑/到/另一個/文件]「

包括的引號。它們可以是單引號或雙引號,但它們必須在那裏。在Eclipse中,如果我設置命令行參數(調試配置/參數)並輸入上面的命令行選項(減去/ path/to/exe),Eclipse會引用引號。由於我在Linux上運行這個方括號會給shell帶來麻煩,它甚至不會將它寫入我的代碼中。

如果我設置的命令行參數從而:

「這是引用」

的argv [1]看起來像這樣:

此被引述

即沒有引號。如果我設置了這樣的命令行:

\「這是引用\」

我得到:

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

如果我嘗試把方括號中它可以追溯到給予殼悲傷,即使我試圖逃跑他們:

\"\[this is quoted\]\" 

我如何告訴Eclipse來把我的命令行參數完全一樣,我進入了他們?

感謝

回答

0

你已經嘗試

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

順便說一句:這不是一個日食問題,但只是反映了shell的行爲。

+0

我沒有,但我只是。一個很好的嘗試,但仍然不是我所追求的。我發現在「gdb traces」控制檯窗口中,它向我展示了Eclipse與gdb的對話,並且在那裏我可以看到它發出以下命令: –

+0

(對不起 - 我的編輯被中斷)

我沒有,但我只是做了。一個很好的嘗試,但仍然不是我所追求的。我發現在「gdb traces」控制檯窗口中,它向我展示了Eclipse與gdb的對話,並且在那裏我可以看到它發出'set args「\」\\ [這是引用的\\] \「」'。我意識到shell會解釋未轉義的括號,但是它改變了我已經告訴它用作命令行的東西。如果我在真實命令行中輸入相同的文本,它會按預期工作 - 在argv中沒有引號,但括號會通過unmolested傳遞。 –

+1

@ g-makulik:我認爲這是一個日食/ CDT問題。我在Linux GTK和Eclipse Indigo上遇到了這個問題。在通過gdb設置參數時,eclipse/MI沒有正確設置CDT調試配置的參數選項卡中帶空格的程序參數的雙引號。您必須使用單引號。此外,這是一個線程,即使這不適用於Windows:http://www.eclipse.org/forums/index.php/t/175270/我得到正確的行爲運行程序從bash shell,但不是eclipse調試發射器。 – timblaktu

2

認爲我發現了一個解決方案 - 至少這已經連續多次工作了。在Eclipse的參數選項卡,在「程序參數」字段中輸入命令行參數如下:

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

這變成:

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

在gdb的「設置ARGS」命令。我用單引號圍繞方括號表達式結束,但這對我的應用程序來說很好。我不知道爲什麼這會起作用(我希望我這麼做),或者爲什麼其他逃避文本的方式失敗。

單引號的雙重命令的重要性。如果您嘗試將單引號放在外面,它會變成

set args -p:parameterName=\"[foo,bar]\" 

失敗。不知道如果需要雙引號,我會怎麼做。

+0

非常感謝*真的很有幫助。 –

2

我解決了這個問題,所以現在有明確的規則來提供參數。您可以在這裏詳細瞭解此:

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

的主要原則是運行和調試必須有同樣的表現,論點主要是什麼由程序而不是bash的接受,以及如何規則提供參數必須簡單直觀。當使用單個字符串來傳達每個參數結束的位置時,完全避免規則是不可能的,某些特殊標記是不可避免的。

因此,參數以下列方式工作:

  • 下一個反斜槓任何字符字面對待,失去特殊含義。

  • 在引用之後和下一個匹配引號(或EOF)之前的任何字符都被逐字處理並失去了特殊含義(包括單和雙)。

  • 將空格(除非轉義或在引號內)用作參數分隔符。

以前的行爲是非常不確定的,就像這樣`date`將由慶典被塗膠,但行爲並不總是等同於猛砸。這可能會破壞一些用戶的hacky配置,但現在重寫是微不足道的,而在正確的字符串必須通過試驗和錯誤與各種組合的轉義引用找到之前,「我需要一個,兩個還是四個反斜槓?」。

+0

現在想通了,每晚CDT在每個參數周圍加單引號。調試配置參數包含 A B C 在ARGV中,我找到'A''B''C'。 ? – Gabor