首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找出分段故障的真实线路

找出分段故障的真实线路
EN

Stack Overflow用户
提问于 2021-06-27 13:36:47
回答 1查看 803关注 0票数 0

我的程序中有段错误,所以我用gdb运行,

分段故障如下所示

代码语言:javascript
运行
复制
Thread 5 "acd" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff56bb700 (LWP 51279)]
__strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:96
96      ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory.
(gdb)

我如何知道哪一行代码会产生这样的结果?

更新

这就是发生这种情况的地方,当这个carsh发生时,我将尝试调试消息和主题的值。

代码语言:javascript
运行
复制
Thread 5 "acd" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff56bb700 (LWP 53721)]
__strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:96
96      ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory.
(gdb)
(gdb)
(gdb) up
#1  0x00007ffff737be95 in __vfprintf_internal (s=s@entry=0x7ffff56bab90,
    format=format@entry=0x7ffff7511006 "Invalid %s eyecatcher %d in heap item at file %s line %d", ap=ap@entry=0x7ffff56bad10,
    mode_flags=mode_flags@entry=2) at vfprintf-internal.c:1688
1688    vfprintf-internal.c: No such file or directory.
(gdb) up
#2  0x00007ffff738f11a in __vsnprintf_internal (
    string=string@entry=0x7ffff751cca0 <msg_buf> "Invalid end eyecatcher -145667405 in heap item at file depth 1", maxlen=<optimized out>,
    maxlen@entry=512, format=format@entry=0x7ffff7511006 "Invalid %s eyecatcher %d in heap item at file %s line %d", args=args@entry=0x7ffff56bad10,
    mode_flags=mode_flags@entry=2) at vsnprintf.c:114
114     vsnprintf.c: No such file or directory.
(gdb) up
#3  0x00007ffff7431022 in ___vsnprintf_chk (s=s@entry=0x7ffff751cca0 <msg_buf> "Invalid end eyecatcher -145667405 in heap item at file depth 1",
    maxlen=maxlen@entry=512, flag=flag@entry=1, slen=slen@entry=512,
    format=format@entry=0x7ffff7511006 "Invalid %s eyecatcher %d in heap item at file %s line %d", ap=ap@entry=0x7ffff56bad10) at vsnprintf_chk.c:34
34      vsnprintf_chk.c: No such file or directory.
(gdb) up
#4  0x00007ffff7509768 in vsnprintf (__ap=0x7ffff56bad10, __fmt=0x7ffff7511006 "Invalid %s eyecatcher %d in heap item at file %s line %d", __n=512,
    __s=0x7ffff751cca0 <msg_buf> "Invalid end eyecatcher -145667405 in heap item at file depth 1") at /usr/include/x86_64-linux-gnu/bits/stdio2.h:80
80        return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
(gdb) up
#5  Log (log_level=log_level@entry=LOG_ERROR, msgno=msgno@entry=13,
    format=format@entry=0x7ffff7511006 "Invalid %s eyecatcher %d in heap item at file %s line %d") at src/Log.c:438
438                     vsnprintf(msg_buf, sizeof(msg_buf), format, args);
(gdb) up
#6  0x00007ffff74fa786 in checkEyecatchers (file=file@entry=0x7ffff7514ab3 "src/MQTTClient.c", line=line@entry=611, p=p@entry=0x5555555e17c8,
    size=<optimized out>) at src/Heap.c:234
234                     Log(LOG_ERROR, 13, msg, "end", us, file, line);
(gdb) up
#7  0x00007ffff74fa818 in Internal_heap_unlink (file=file@entry=0x7ffff7514ab3 "src/MQTTClient.c", line=line@entry=611, p=p@entry=0x5555555e17c8)
    at src/Heap.c:258
258                     checkEyecatchers(file, line, p, s->size);
(gdb) up
#8  0x00007ffff74faa49 in myfree (file=file@entry=0x7ffff7514ab3 "src/MQTTClient.c", line=line@entry=611, p=0x5555555e17c8) at src/Heap.c:282
282                     if (Internal_heap_unlink(file, line, p))
(gdb) up
#9  0x00007ffff750c44a in MQTTClient_freeMessage (message=message@entry=0x7ffff56bae88) at src/MQTTClient.c:611
611             free((*message)->payload);
(gdb) up
#10 0x0000555555577e90 in messageArrived (context=<optimized out>, topicName=0x5555555dfa48 "aster001/308555098653740", topicLen=<optimized out>,
    message=<optimized out>) at /home/aster/acd/src/MQTTInterface/MQTTInterface.c:113
113         MQTTClient_freeMessage(&message);
(gdb) up
#11 0x00007ffff750e64a in MQTTClient_run (n=<optimized out>) at src/MQTTClient.c:862
862                                     rc = (*(m->ma))(m->context, qe->topicName, topicLen, qe->msg);
(gdb) up
#12 0x00007ffff78b0609 in start_thread (arg=<optimized out>) at pthread_create.c:477
477     pthread_create.c: No such file or directory.
(gdb) up
#13 0x00007ffff7422293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
95      ../sysdeps/unix/sysv/linux/x86_64/clone.S: No such file or directory.
(gdb) up
Initial frame selected; you cannot go up.
(gdb)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-27 14:40:42

,我如何知道哪一行代码会产生这样的结果?

崩溃发生在strlen实现内部。您需要找到名为strlen的代码。这样做的GDB命令是where (或其等效的backtrace)。

where命令将显示导致崩溃的调用堆栈。如果您使用调试信息(通常是-g)构建代码,调用堆栈将包含文件和行信息,这将准确地指向代码中执行strlen的位置,而这些位置并不是正确的C字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68151749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档