GDB выдает загадочную ошибку при вызове из NSTask - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь использовать NSTask для вызова GDB, переменная "resultStringID" на самом деле является соответствующим идентификатором процесса, а "abc" - это просто NSString. Мой код для вызова GDB выглядит следующим образом

NSMutableString *resultStringID = [NSMutableString stringWithCapacity:processSelected.length];

        NSScanner *scanner = [NSScanner scannerWithString:processSelected];  
        //define the allowed characters, here only all numbers are allowed 
        NSCharacterSet *allowedChars = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"]; 

        while ([scanner isAtEnd] == NO) {  
            NSString *buffer;  
            if ([scanner scanCharactersFromSet:allowedChars intoString:&buffer]) {  
                [resultStringID appendString:buffer];       
            } else {  
                [scanner setScanLocation:([scanner scanLocation] + 1)];  
            }  
        }  

        //Trim off the last 3 characters if the string is larger than 4 characters long
        if ( [resultStringID length] > 4 )
            resultStringID = [resultStringID substringToIndex:[resultStringID length] - 3];


        NSInteger pid1 = [resultStringID intValue];

        //NSLog(@"pid 1 is :%@", pid1);

        NSTask *task = [[NSTask alloc] init];
        [task setLaunchPath: @"/usr/bin/gdb"];

        NSString * abc = @"abc";



        //NSLog(@"Process with extension %@", fullString);

        NSArray *arguments;
        arguments = [NSArray arrayWithObjects: abc, resultStringID, nil];
        [task setArguments: arguments];

        NSPipe *pipe;
        pipe = [NSPipe pipe];
        [task setStandardOutput: pipe];

        NSFileHandle *file;
        file = [pipe fileHandleForReading];

        [task launch];

        NSData *data;
        data = [file readDataToEndOfFile];

        NSString *string;
        string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
        NSLog (@"GDB Output:\n%@", string);

        /*
        GDBViewController *bController = [[GDBViewController alloc] init];
        [self.navigationController pushViewController:bController animated:YES];
        [bController release];
        */

        TableViewController_09AppDelegate *appDelegate = (TableViewController_09AppDelegate*)[[UIApplication sharedApplication] delegate];


        [string release];
        [task release];

Любая помощь очень ценится! :)

Результат запуска задачи выглядит следующим образом:

RE:Notice: Launching: com.apple.gdb
abc: No such file or directory 
//763: No such file or directory
Unable to access task for process-id 763: (os/kern) failure.
2011-08-24 08:53:06.002 TableViewController_09[764:507] GDB Output:
GNU gdb 6.3.50.20050815-cvs (Fri Mar 18 17:42:37 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=arm-apple-darwin9 --target="...
(gdb) Exception condition detected on fd 0
error detected on stdin

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Ваш код ведет себя правильно.

Ошибка GDB, потому что аргументы, которые вы предоставляете, указывают на несуществующий файл. Эта строка вывода:

2011-08-24 08:53:06.002 TableViewController_09[764:507] GDB Output:

… происходит от этой строки кода:

NSLog (@"GDB Output:\n%@", string);

и все, что после этой строки выводится из экземпляра NSTask. error detected on stdin вызвано тем, что вы передали abc в качестве имени файла для запуска GDB.

0 голосов
/ 24 августа 2011

Строка error detected on stdin указывает на отсутствие стандартного ввода для процесса. Вы настроили NSPipe для стандартного выхода, почему бы не настроить его для стандартного ввода?

...