對GDB

2011-04-30 28 views
1

我試圖創建一個使用GDB附加到一個程序中的NSTask創建NSTask,但我的程序啓動後的任務只是凍結。這可能嗎?下面是我使用的代碼:對GDB

NSTask *task = [NSTask new]; 
[task setLaunchPath:@"/usr/bin/gdb"]; 
NSArray *args = [NSArray arrayWithObjects:@"TestApp.app", nil]; 
[task setArguments:args]; 
[task launch]; 
NSLog(@"Launched."); 

NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile]; 
NSLog(@"Read data."); 

我敢肯定「TestApp.app」是在正確的位置,因爲我不明白「沒有這樣的文件或目錄」錯誤。控制檯只打印「已啓動」。而旋轉的沙灘球只會持續一分多鐘,直到我殺死跑步。任何想法可以使這項工作?

+0

什麼時候TestApp退出? – justin 2011-04-30 02:01:00

+0

我建議你閱讀可可開發中心以下信息:[包裝UNIX命令(http://cocoadevcentral.com/articles/000025.php)和[包裝UNIX命令第二部分(http://cocoadevcentral.com/文章/ 000031.php)。 – 2011-04-30 02:58:32

+0

執行該命令後,您的gdb NSTask會立即脫離還是創建一個持久性會話(如在終端中)? – 2011-11-02 07:20:59

回答

1

有些事情要考慮:

  • 這是明智的set a pipe for standard input。有一些情況,特別是當調用NSLog()時,最終掛起NSTask

  • 如果發送-readDataToEndOfFile到標準輸出手柄,你的線程將暫停,直到任務完成執行。如果代碼在主線程上運行,那麼這是特別糟糕的 - 不會更改用戶界面更改或應用程序事件,這很可能最終導致應用程序退出。改爲使用…inBackground…方法。

  • 你不將數據發送到標準輸入。如果gdb沒有收到任何輸入,它將無限期地等待,直到收到命令。