Cpp / Gdb返回0;导致所有用户会话注销

时间:2014-08-18 15:31:00

标签: c++ debugging

我编写了C ++应用程序,导致所有 KDE 会话在程序退出时注销。这显然是不可能的行为,因为我的应用程序是围绕网络运行的。我没有使用任何 Qt / KDE 库,这就是我感到惊讶的原因。应用程序会导致所有会话在return 0;上注销,甚至在 gdb 下运行。我在执行rip之前检查了return 0;注册。它指向main()的中间,我有4行代码。

我的问题是:

  1. 有人有这样的行为吗?我的意思是在main()结束时return 0;上的会话注销。
  2. 我应该开始调查我的代码,这类错误的常见位置是什么?
  3. 如何保存 strace 的输出?我试过了$ strace app > strace1。文件已创建,但没有内容(可能是由会话注销引起的)。
  4. 整个代码太复杂,无法在此处显示。我正在努力:

     3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
    

    EDIT1:当从tty运行应用程序时,它会注销当前用户并执行DoS,只有机器重启才能提供帮助。我将在虚拟机上运行它,也许会有其他行为。

2 个答案:

答案 0 :(得分:1)

此行为是由编码错误的应用程序逻辑引起的。当我做return 0;时,调用了几个类的析构函数,其中一个是杀死子进程。

// Proof of concept:
#include <unistd.h>
#include <signal.h>

int main()
{ kill(-1, SIGKILL); }

只需阅读 man ,-1参数将杀死所有进程,除了1.这是隐秘的大声笑。

答案 1 :(得分:0)

  

如何保存strace的输出?我试过$ strace app > strace1

$ strace app >& strace1也可以重定向STDERR。

相关问题