【问题标题】:gdb is showing "program exited" during startupgdb 在启动期间显示“程序已退出”
【发布时间】:2017-04-18 15:24:55
【问题描述】:

为什么gdb在启动时显示程序退出,所以之前在main函数的第一个断点处停止?

一些步骤:

$ gdb --cd $programhome -tui -tty $reservedtty --args myprogram

b main
r

gdb 显示:

Starting program: myprogram
During startup program exited with code 1.

我已经尝试在 exit() 函数处中断,但没有成功。

【问题讨论】:

    标签: gdb


    【解决方案1】:

    为什么gdb在main函数第一个断点处停止之前退出

    1. GDB 没有退出。你的程序可以。
    2. 它确实退出之前到达main

    这可能有几个原因,例如:

    1. 损坏的二进制文件 -- 内核在execve 系统调用中出于某种原因拒绝了它,并且没有一条程序指令实际运行。
    2. 动态链接器拒绝它(例如,因为缺少某些必需的库或符号)
    3. 您的 shell 拒绝执行程序(错误的 ~/.bashrc、错误的 $PATH 等)。

    您可以通过在 GDB 之外运行程序(它是否运行?)、不使用 ~/.bashrc 运行、使用 (gdb) catch syscall exit_group(在 Linux 上)等来缩小实际原因。

    【讨论】:

    • 是的。它运行。对“gdb exits”感到抱歉,什么时候应该是“gdb 显示过早退出”。我会编辑它。
    • 您的回答向我展示了调查可能干扰程序加载/执行的外部因素的方法。我找到了 !那是 tty 权限。 Tnx
    【解决方案2】:

    访问辅助终端端口时出现权限问题。

    gdb 使用参数-tty 启动,该参数将输入/输出切换到另一个 tty 端口(在这种情况下为伪:pts)。

    当两个终端被不同的用户打开时,就会出现这个问题,即使第一次登录后你用su命令更改用户,两个tty中第一个登录的用户也需要相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2017-06-10
      • 2011-10-14
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      相关资源
      最近更新 更多