当前位置: 技术问答>linux和unix
【请教】段错误gdb调试的问题
来源: 互联网 发布时间:2016-03-12
本文导语: 最近在试用一个网上下载的程序时,发生了点问题 先是在make时,提示32位模式不支持-mcmodel=medium ,ok,我直接把makefile中的-mcmodel=medium 一项删掉 make通过了,生成的程序叫embed 然后运行时出现段错误。 用GDB追踪,...
最近在试用一个网上下载的程序时,发生了点问题
先是在make时,提示32位模式不支持-mcmodel=medium ,ok,我直接把makefile中的-mcmodel=medium 一项删掉
make通过了,生成的程序叫embed
然后运行时出现段错误。
用GDB追踪,说是received signal sigsegv,.....in ___strtol_l_internal() from /lib/tls/libc.so.6
然后frame命令提示错误出现在在embed.c的1145行,我找到这一行:
1141 int main(int argc, char ** argv) {
1142 //init
1143
1144 //fetch all requests
1145 n = atoi(argv[1]);
1146 double delay = atof(argv[2]);
但是感觉这一行没有什么问题呀,哪位高手能指点一下,谢谢!仅有的10分相送!以后分多了可以再谢!:)
先是在make时,提示32位模式不支持-mcmodel=medium ,ok,我直接把makefile中的-mcmodel=medium 一项删掉
make通过了,生成的程序叫embed
然后运行时出现段错误。
用GDB追踪,说是received signal sigsegv,.....in ___strtol_l_internal() from /lib/tls/libc.so.6
然后frame命令提示错误出现在在embed.c的1145行,我找到这一行:
1141 int main(int argc, char ** argv) {
1142 //init
1143
1144 //fetch all requests
1145 n = atoi(argv[1]);
1146 double delay = atof(argv[2]);
但是感觉这一行没有什么问题呀,哪位高手能指点一下,谢谢!仅有的10分相送!以后分多了可以再谢!:)
|
运行时没有加参数啊。 argv[1]不存在啊,自然就溢出啦。
gdb ./embed后在gdb里面 run的时候,没有加参数。这样atoi的时候就会访问非法地址了。我以前碰到过的。错误提示也是如此。 :)
(gdb) r 1 2 3 这样再试试,应该就明白了。
gdb ./embed后在gdb里面 run的时候,没有加参数。这样atoi的时候就会访问非法地址了。我以前碰到过的。错误提示也是如此。 :)
(gdb) r 1 2 3 这样再试试,应该就明白了。