当前位置: 技术问答>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 这样再试试,应该就明白了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。