in reply to Re: The perl debugger and an embedded interpreter
in thread The perl debugger and an embedded interpreter
If you're not familiar with blocks and grand central dispatch, just imagine the code in the ^{ ... } bits are running on a background thread. The envDict is an NSDictionary containing how I want the environment to be setup.static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ int argc = 1; char * argv[] = { "myPerlInterp", "-w" }; PERL_SYS_INIT3(&argc, (char ***)&argv, (char ***)NULL); }); ... [(NSMutableDictionary *)envDict setObject:@"TTY=/dev/ttys001 L +ineInfo=/dev/ttys003 ReadLine=1" forKey:@"PERLDB_OPTS"]; my_perl_env = calloc(sizeof(char *), [envDict count] + 1); int i=0; for (NSString * var in [envDict allKeys]) { //TODO: unsure if this is going to propogate any non-ascii + paths correctly NSString * entry = [NSString stringWithFormat:@"%@=%@", va +r, [envDict objectForKey:var]]; const char * val = [entry UTF8String]; char * val_copy = calloc(sizeof(char), strlen(val) + 1); strncpy(val_copy, val, strlen(val)); my_perl_env[i++] = val_copy; } my_perl_queue = dispatch_queue_create([label cStringUsingEncod +ing:NSASCIIStringEncoding], DISPATCH_QUEUE_SERIAL); dispatch_sync(my_perl_queue, ^{ //char * embedding[] = { "", "-w", "-e", "0" }; char * embedding[] = { "", "-w", "-d", "-e", "0" }; int embedding_count = sizeof(embedding) / sizeof(char *); my_perl = perl_alloc(); PL_perl_destruct_level = 1; perl_construct(my_perl); perl_parse(my_perl, xs_init, embedding_count, embedding, m +y_perl_env); // not sure why the perl_parse env isn't used to setup @IN +C - even giving it to PERL_SYS_INIT3 doesn't work eval_pv("use Env qw(@PERL5LIB); push @INC, @PERL5LIB;", TR +UE); PL_exit_flags |= PERL_EXIT_DESTRUCT_END; }); }
As I said this generally works, and in the above incantation, /dev/ttys01 gets this output:
And then the code continues to run with no interactive prompt (just typing stuff leaves it in the buffer - stdin never seems to be read). The same happens just running at the console without the PERL5DB_OPTS or using the RemotePort/nc method.Marks-MacBook-Air:~ aufflick$ sleep 1000000 Loading DB routines from perl5db.pl version 1.32 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help.
I'm trying to figure out how to set a breakpoint in advance to see if that manages to enter the debugger. perldebguts talks about %{"::_<current_file"} but I can't seem to figure it out.
|
|---|