我在尝试使用 gdb 调试任何程序的任何代码上都会收到此 gdb 错误。这是重现错误的最简单过程
- 创建一个
main.cpp
包含以下内容的文件:
int main(){
return 0;
}
- Run
g++ -g main.cpp
- Run
gdb a.out
- 在 gdb 内部在第 2 行设置一个断点
break 2
- 在 gdb 中运行程序
run
Output:
Starting program: /tmp/test/a.out
During startup program exited normally.
这一切都是通过命令行上的 gdb 完成的。我尝试使用 g++ 和 gcc 得到相同的结果。我不太确定从这里该去哪里。
- gdb 版本 = 9.2
- g++ 版本 = 9.3.0
编辑:我找出了导致问题的原因,但不知道如何解决它。这个问题似乎与我有关SHELL
多变的。我目前正在使用xonsh https://xon.sh/作为我的外壳,但是当我设置我的SHELL
环境变量返回/bin/bash
一切都按预期进行。使用 xonsh 时我可以做些什么来解决这个问题吗?我应该向 xonsh、gdb 报告此问题,还是两者都报告?
我目前使用 xonsh 作为我的 shell,但是当我将 SHELL 环境变量设置回 /bin/bash 时,一切都会按预期工作。使用 xonsh 时我可以做些什么来解决这个问题吗?我应该向 xonsh、gdb 报告此问题,还是两者都报告?
这可能是你的xonsh
启动问题,或者可能是xonsh
问题,或者可能是xonsh
没有做 GDB 期望的事情。
通常情况下,GDBfork
s / exec
s $SHELL -c "/path/to/your/exe $args"
并期望$SHELL
to exec
你的程序(这样做是为了让 shell 重定向在 GDB 下仍然有效)。
Only after that exec
GDB会开始设置断点等吗
如果你有一些xonsh
初始化文件,例如原因xonsh
to exec
别的事情,事情可能会变得糟糕。所以我建议尝试删除任何此类~/.xonshrc
或任何所谓的文件,看看是否可以解决问题。
如果没有的话,可能是这样的xonsh
e.g. fork
s and exec
将您的二进制文件放在子级(GDB 的孙级)中,而不是直接执行它,或者可能是这样xonsh
不明白-c ...
syntax.
如果你不关心重定向,你也可以要求GDB不要使用$SHELL
完全:set startup-with-shell off
. 文档 https://sourceware.org/gdb/current/onlinedocs/gdb/Starting.html#Starting.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)