c/c++语言开发共享为什么GDB启动一个新shell以及如何禁用此行为?

我正在弄清楚一个问题,从GDB启动应用程序会导致符号查找错误,但从shell启动它的工作原理。

事实certificate,无论何时从GDB内部启动程序,它都会启动一个新的shell,从而覆盖我在启动GDB之前设置的所有环境变量(如LD_LIBRARY_PATH )。

这不是我想要的行为。 有人可以解释这背后的理由,或者告诉我如何解决这个问题?

    我猜你在~/.cshrc之类的无条件设置LD_LIBRARY_PATH 。 因此,如果从shell提示符执行此操作:

     export LD_LIBRARY_PATH=foo # or for csh: setenv LD_LIBRARY_PATH foo $SHELL -c 'echo $LD_LIBRARY_PATH' 

    结果是除了foo其他东西。 不要那样做。

    通常这发生在CSH用户身上,他们忽略了保护他们的~/.cshrc免受非交互式shell攻击。 设置BASH_ENV BASH用户也可能会遇到这种情况。

    我遇到了同样的问题。 我发现在inferior.h(gdb gdb / inferior.h的源代码)中有一个宏STARTUP_WITH_SHELL ,还有一条评论作为

     /* If STARTUP_WITH_SHELL is set, GDB's "run" will attempts to start up the debugee under a shell. This is in order for argument-expansion to occur. Eg, (gdb) run * The "*" gets expanded by the shell into a list of files. While this is a nice feature, it turns out to interact badly with some of the catch-fork/catch-exec features we have added. In particular, if the shell does any fork/exec's before the exec of the target program, that can confuse GDB. To disable this feature, set STARTUP_WITH_SHELL to 0. To enable this feature, set STARTUP_WITH_SHELL to 1. The catch-exec traps expected during start-up will be 1 if target is not started up with a shell, 2 if it is. - RT If you disable this, you need to decrement START_INFERIOR_TRAPS_EXPECTED in tm.h. */ #define STARTUP_WITH_SHELL 1 #if !defined(START_INFERIOR_TRAPS_EXPECTED) #define START_INFERIOR_TRAPS_EXPECTED 2 #endif 

    然后我将STARTUP_WITH_SHELL设置为0并递减START_INFERIOR_TRAPS_EXPECTED并重新编译我的gdb。 之后,gdb不再从shell启动了。

    当你从shell启动gdb时,你将它作为一个新进程启动,没有办法解决这个问题。 在Unix中,新进程inheritance了父进程的一些环境。

    要确保inheritance变量,如果您使用的是类似bourne的shell,请尝试导出它:

     export LD_LIBRARY_PATH=... 

    调试对象(在gdb用语中较差 )始终以干净的环境启动,以获得更可重现的结果。 要在那里设置变量,请使用

     set env VARNAME=VALUE 

    运行前的命令。

      以上就是c/c++开发分享为什么GDB启动一个新shell以及如何禁用此行为?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560813.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐