当前位置: 技术问答>linux和unix
为什么gcc编译通过,gdb调试报“Segment fault”呢
来源: 互联网 发布时间:2015-12-12
本文导语: 如题。 一个简单的程序: /************Main program*********************/ #include #include "print3times.h" int main() { print3times(); return 0; } /************Print 3 times*********************/ void print3times(); void print3times() { printf("%s", "test 1...
如题。
一个简单的程序:
/************Main program*********************/
#include
#include "print3times.h"
int main()
{
print3times();
return 0;
}
/************Print 3 times*********************/
void print3times();
void print3times()
{
printf("%s", "test 1stn");
printf("%s", "test 2ndn");
printf("%s", "test 3rdn");
}
而且,如果将声明放在.h文件中,将定义放在.c文件中。
编译时,会报“undefined reference to `print3times'”。
于是,只好将声明与定义都放在一个.h文件中。
调试时,总报“Segment fault“。
两个问题:
1)该如何定位
2)gdb怎样才能进入被调用的函数内部?
一个简单的程序:
/************Main program*********************/
#include
#include "print3times.h"
int main()
{
print3times();
return 0;
}
/************Print 3 times*********************/
void print3times();
void print3times()
{
printf("%s", "test 1stn");
printf("%s", "test 2ndn");
printf("%s", "test 3rdn");
}
而且,如果将声明放在.h文件中,将定义放在.c文件中。
编译时,会报“undefined reference to `print3times'”。
于是,只好将声明与定义都放在一个.h文件中。
调试时,总报“Segment fault“。
两个问题:
1)该如何定位
2)gdb怎样才能进入被调用的函数内部?
|
//=====================================================
//main.c
#include
#include "print3times.h"
int main()
{
print3times();
return 0;
}
void print3times()
{
printf("%s", "test 1stn");
printf("%s", "test 2ndn");
printf("%s", "test 3rdn");
}
//end main.c
//=================================================================
//==================================================================
//print3times.h
/************Print 3 times*********************/
void print3times();
//end print3times.h
//=====================================================================
gdb里s 进入函数.
//main.c
#include
#include "print3times.h"
int main()
{
print3times();
return 0;
}
void print3times()
{
printf("%s", "test 1stn");
printf("%s", "test 2ndn");
printf("%s", "test 3rdn");
}
//end main.c
//=================================================================
//==================================================================
//print3times.h
/************Print 3 times*********************/
void print3times();
//end print3times.h
//=====================================================================
gdb里s 进入函数.
|
要定位错误那就逐行执行,s(step)进入函数,n(next)不进入函数