为什么在GDB中运行更改函数返回?

时间:2017-04-25 19:08:54

标签: c++ gdb

我正在用C ++编写一个程序,它使用ptrace跟踪另一个进程的系统调用。我有一个辅助函数,用于确定子进程是否具有一个状态,指示它已在系统调用的入口或出口处停止:

static bool isSysCall(int status) {
    return WSTOPSIG(status) == (SIGTRAP | 0x80);
}

在gdb下运行时,当单步执行子进程的系统调用时,此函数返回true(应该如此)。但是,当我在没有gdb的情况下运行此程序时,此函数始终返回false,导致我的程序无法确定子进程何时进入/退出系统调用。这种与gdb vs的行为差异导致我的跟踪程序在gdb中正确运行但在没有gbd运行时失败。我怎样才能让这个函数在有/没有GDB的情况下返回相同的东西?

其他信息: 通过调用

跟踪子进程的ptrace
ptrace(PTRACE_TRACEME);

在子进程中,在父进程中我使用

ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD);

设置由

更改的状态的第7位
waitpid(pid, &status, 0);
当有系统调用时,如ptrace man page中所述

。上面的(看似有问题的)辅助函数仅用于检查第7位。

0 个答案:

没有答案