与gdb交互工作意外
我只是试图控制gdb, 玩具是gdb的前端。
来自这个答案的代码:在我的fedora系统上使用python3完美地工作。 但由于某种原因不适用于gdb。
这工作:
var child = require('child_process'); var ps = child.spawn('python', ['-i']); ps.stdout.pipe(process.stdout); ps.stdin.write('1+1'); ps.stdin.end();
这不起作用:
var child = require('child_process'); var ps = child.spawn("gdb", ['gdb-test', '-q']); ps.stdout.pipe(process.stdout); ps.stdin.write('start');
问题: (1)它打印到标准输出:
从gdb-test读取符号…从gdb-test …读取符号完成。
所以出于某种原因,就好像命令运行了两次。 (2)最重要的是, 启动命令并没有送入gdb,也没有在main里面放置断点。
例如:如果我手动内部运行, 开始将导致: “临时断点1,main()在gdb-test.c:5”
gdb-test是这样编译的代码:
//gdb-test.c: #include<stdio.h> int main() { int i = 10; i++; printf("%d\n"); }
我知道gdb有一个-tty选项,我不知道如何设置一个tty甚至应该工作,这里的任何线索也将受到欢迎,或设置一个tty和gdb的机器接口交互的线索。
start命令不会被传入gdb,也不会在main中放置断点
当您在gdb提示符下手动inputstart
命令时,您按下Enter键实际执行它。 你应该在js脚本中做同样的事情。 在start
命令结尾添加\n
:
ps.stdin.write('start\n');
至于(1)的问题,我无法在Fedora上重现它。