【问题标题】:interacting with gdb works unexpectedly与 gdb 交互出乎意料地工作
【发布时间】:2017-01-11 10:31:13
【问题描述】:

我只是在玩弄控制gdb,玩具是gdb的前线。

来自this answer 的代码:在我的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) 最重要的是,start 命令并没有被输入到 gdb 中,而且它也没有像往常一样在 main 中放置一个断点。

例如:如果我在 bash 中手动运行,start 将导致:"Temporary breakpoint 1, main () at gdb-test.c:5"

gdb-test 这段代码是否已编译:

//gdb-test.c:
#include<stdio.h>
int main()
{
    int i = 10;
    i++;
    printf("%d\n"); 
}

我知道gdb has 一个 -tty 选项,我不太确定设置 tty 应该如何工作,这里的任何线索也将受到欢迎,或设置线索一个 tty 并与 gdb 的机器界面交互。

【问题讨论】:

    标签: javascript node.js gdb pipe


    【解决方案1】:

    启动命令没有输入 gdb,它也没有 在 main 中放置断点是通常的事情

    当您在 gdb 提示符下手动键入 start 命令时,您正在按 Enter 来实际执行它。您应该在 js 脚本中执行相同的操作。在start命令末尾添加\n

    ps.stdin.write('start\n');
    

    至于 (1) 问题我无法在 Fedora 上重现。

    【讨论】:

    • 天哪。这很尴尬。猜猜我脑子里到处都是在做各种不同的事情。问题 1 也发生了,因为我机器上的代码将进程输出通过管道传输到标准输出两次。 :/ 我现在需要在某个地方放松一下 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2020-04-12
    • 2019-03-25
    • 1970-01-01
    • 2021-11-29
    • 2014-09-11
    相关资源
    最近更新 更多