我完全改变了帖子。 因为我在韩国军队工作。 但韩国军队互联网计算机禁止上传文件。 所以我真的上传了我的源代码。但我不能。 所以我尝试使用gdb调试非常简单的程序。 但它仍然无效。
我的系统是
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
在云IDE中称为" nitrous"
和g ++,gdb版本是
g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
GNU gdb (GDB) 7.8
我编写了非常简单的代码:simple.cpp
#include <iostream>
int main(){
std::cout << "Hello World!" << std::endl;
return 0;
}
使用&#34; -g&#34;编译和gdb执行
nitrous@ubuntu-108903:~/code$ g++ -g simple.cpp -o simple
nitrous@ubuntu-108903:~/code$ gdb simple
并设置break main并运行
Reading symbols from simple...done.
(gdb) break main
Breakpoint 1 at 0x400861: file simple.cpp, line 4.
(gdb) run
Starting program: /home/nitrous/code/simple
Hello World!
During startup program exited normally.
即使是非常简单的helloworld程序也无法正常工作。 只是打印出来在启动程序中退出。
答案 0 :(得分:0)
我设定了一个断点,但它没有被击中。什么问题?
最可能的问题是您的程序在到达main
之前终止。 (典型的动态链接程序在到达main
之前将执行数百个指令。)
在GDB下运行程序,直到GDB以SIGSEGV
停止。执行GDB where
命令。注意main
不在堆栈中。
一旦确认main
不在堆栈中,请提出另一个问题(假设您仍然不理解崩溃的原因)。
答案 1 :(得分:0)
我猜gdb由于某种原因未能设置断点。尝试用sudo运行gdb。
顺便说一下,你能为strace -f -o syscall.txt gdb ./simple.out
生成的精灵和grep运行strace吗?它应该类似于{{1}}。