为什么 gdb 不适用于这个简单的 hello world 程序
Why gdb is not working for this simple hello world program?
Code (m1.cpp(:
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
cout << "running m1" << endl;
return 0;
}
GDB 版本: GNU gdb (GDB( 7.6.2
构建使用:g++ -g m1.cpp
命令行历史记录:
(gdb) b main
Breakpoint 1 at 0x40087b: file m1.cpp, line 6.
(gdb) r
Starting program: .../a.out
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaaaac16a0 in strcmp () from /lib64/ld-linux-x86-64.so.2
(gdb) c
Continuing.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb)
当我在未设置任何断点的情况下运行时,它运行时没有错误。
根据要求:
(gdb) bt
#0 strcmp () from /lib64/ld-linux-x86-64.so.2
#1 in check_match.12104 () from /lib64/ld-linux-x86-64.so.2
#2 in do_lookup_x () from /lib64/ld-linux-x86-64.so.2
#3 in _dl_lookup_symbol_x () from /lib64/ld-linux-x86-64.so.2
#4 in _dl_relocate_object () from /lib64/ld-linux-x86-64.so.2
#5 in dl_main () from /lib64/ld-linux-x86-64.so.2
#6 in _dl_sysdep_start () from /lib64/ld-linux-x86-64.so.2
#7 in _dl_start () from /lib64/ld-linux-x86-64.so.2
#8 in _start () from /lib64/ld-linux-x86-64.so.2
#9 in ?? ()
我能够复制 OP 观察到的行为(使用相同的编译并获得相同的回溯(。 该行为在一系列 GDB 和 GCC 中是持久的。 我注意到当我取消设置 SHELL 时症状消失了。 在我的正常环境中,我使用 tcsh(版本 1.15.00(。 如果设置了 SHELL,那么(我相信(gdb 使用 tcsh 启动。 如果我取消设置 SHELL,gdb 使用 sh 启动。 这足以让我向前迈进。 我没有一个清晰的解释,在tcsh中会有什么不同来表现这个问题,但如果其他人有相同的行为,它可能会对这个问题有更多的了解。
我在我的GNU gdb版本7.11.1中检查过。它在其中工作得非常好。我首先编译了相同的程序,并使用以下命令构建了它:
g++ -g m1.cpp
然后,在 gdb 中运行可执行文件,如下所示:
gdb -q ./a.out
并做了你提到的同样的事情。它工作正常。更新您的 gdb,然后再次检查并告知。
相关文章:
- 无法编译wxWidgets Hello World
- 简单C++"Hello World"程序的执行时间长
- 使用 AWS Lambda 触发C++文件 - Hello World
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 我怎样才能在行尾使用 cout<<"hello world";不使用 ;
- QWebSocket Hello World Example
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 我需要安装什么才能获得在Windows Server 2012 R2 Standard上运行C++hello world
- 运行Qt时处理退出代码0xC0000135 hello world
- 如何使用CLion和MSVC编译器工具链编译wxWidgets Hello World应用程序而没有错误?
- 为什么 MSVC C++编译器将一个简单的 Hello World 扩展为 4000 行汇编?
- 无法运行简单的N-API hello-world示例
- 如何使用python运行Hello world c ++代码
- Eclipse 构建错误在默认的 hello world 上
- SDL Hello World 程序不输出消息
- 在 Hello World.exe 中0x0F828F0E (ucrtbased.dll) 处未处理的异常: 0xC00
- 为什么一个简单的"Hello World"风格的程序不能用Turbo C++编译?
- C Hello World程序中使用了哪种数学
- Visual Studio 中的 Hello World C++ 应用程序 - 关于预编译标头不同的问题
- CPP-Netlib Hello World 示例不会在 Linux 上编译