与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上重现它。