2013-09-29 81 views
10

底線問題:是否有可能讓Xcode等待應用程序啓動,然後從Xcode之外啓動應用程序,然後讓Xcode停在斷點處?從Xcode外部啓動應用程序時Xcode調試斷點

--detailed描述below--

我想調試一個簡單的C程序,需要文本中使用的Xcode 4.6.3上10.8標準輸入到通過管道輸送(通過線由行步驟)。 5。

爲了做到這一點,我需要啓動這樣的程序 $ cat in.txt | ./mysimpleprogram> out.txt 並讓Xcode調試器在斷點處停止。

我按照我在這個答案中找到的說明https://stackoverflow.com/a/13006633/2779792但Xcode不停止在斷點處。

重現該問題

  1. 開放的Xcode 4.6.3

  2. 在 「歡迎使用Xcode的」 屏幕中選擇 「創建一個新的Xcode項目」

  3. 在「選擇你的新項目模板「屏幕選擇Mac OS X - >應用程序 - >命令行工具,然後點擊下一步

  4. 在」C爲您的新項目選擇:「screen Product Name:HelloWorld,Type:C - > Next,使用自動引用計數= False

  5. 爲項目選擇一個位置。

注:在Xcode中設置 - >位置 - >導出數據,我已經選擇了 「相對」

  • 轉到產品菜單 - >計劃 - >編輯方案

  • 在方案編輯窗口的左側,默認選中是「運行HelloWorld調試」。在Scheme編輯窗口的右側,我將自動啓動單選按鈕更改爲「等待HelloWorld啓動」。調試器= LLDB,調試過程As = me

  • 在代碼中設置一個或多個斷點。

  • 選擇產品 - >運行(或單擊「播放」按鈕)。現在主Xcode窗口顯示「等待HelloWorld啓動」。

  • 打開一個終端窗口並導航到HelloWorld可執行文件,在我的情況... /的HelloWorld/DerivedData /的HelloWorld /建設/產品/調試/

  • 運行程序使用命令./HelloWord

  • 該程序運行和打印你好,世界!正如預期的那樣,Xcode表示「完成正在運行的HelloWorld:HelloWorld」。它並沒有停在任何一個斷點上。

    期望的行爲,Xcode應該停在斷點處,讓我逐步完成代碼。

    謝謝你的任何幫助或提示。

    +0

    您是否嘗試過'Debugger-> Attach to Process'? – BergQuester

    +0

    根據您的建議,我嘗試了一些打開終端並選擇產品 - >附加到過程 - >終端的變體。它仍然停留在斷點處。 「終端」是否屬於正確的過程?當然,HelloWorld不是列表中可用的進程,HelloWorld一旦啓動就只會在列表中存在一微秒。 –

    回答

    11

    在調試器注意並附加到您的流程所花費的時間內,流程的執行已經經過了斷點。要在此設置中從調試器獲得確定性行爲,需要在第一個斷點之前暫停執行進程,並等待調試器連接。一個簡單的方法來做到這一點是通過添加代碼發送STOP信號:

    raise(SIGSTOP); 
    

    執行將停止在這一點上,當它附加調試器將自動繼續。

    +0

    這看起來很有前途。然而,我得到這些:隱式聲明函數'raise'在C99中是無效的,並且使用未聲明的標識符'SIGSTOP' –

    +0

    您需要'#include '。 –

    +0

    太棒了。這工作。我有很多要學習的。 –

    相關問題