Gdb QNX中的调试核心转储-如何获取更多信息?

Gdb QNX中的调试核心转储-如何获取更多信息?,gdb,coredump,qnx,Gdb,Coredump,Qnx,我以前的工作代码现在崩溃了。核心转储指向正在调用的构造函数。 我试着得到bt,bt完全和拆卸。我需要一些帮助来总结调用构造函数时导致分段错误的原因是什么? 代码在QNX上运行,并且只有控制台gdb。局部变量都是0,这意味着什么 这是订单: (gdb) bt #0 0x481a95b0 in notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID (path_Type=PATH_NULL, pathId=1215822164,

我以前的工作代码现在崩溃了。核心转储指向正在调用的构造函数。 我试着得到bt,bt完全和拆卸。我需要一些帮助来总结调用构造函数时导致分段错误的原因是什么? 代码在QNX上运行,并且只有控制台gdb。局部变量都是0,这意味着什么

这是订单:

(gdb) bt
#0  0x481a95b0 in notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID (path_Type=PATH_NULL, pathId=1215822164,
    alarm_Id=DS3_PATH_IDLE_ID) at /vob/qnx/cema-common/msg/PathObjMsg.h:47
(gdb) bt full
#0  0x481a95b0 in notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID (path_Type=PATH_NULL, pathId=1215822164,
    alarm_Id=DS3_PATH_IDLE_ID) at /vob/qnx/cema-common/msg/PathObjMsg.h:47
        msg = {<Message> = {msgSource = MSG_SOURCE_INVALID, msgPriority = MSG_PRIO_LOW, msgLength = 0},
  msgType = MSG_PATH_ALARM, pathType = PATH_NULL, pathId = {bay = 0 '\0', line = 0 '\0', path = {stsn = {
        sts1Num = 0 '\0'}, vt = {sts1Num = 0 '\0', isTu3 = 0 '\0', tug3Num = 0 '\0', vtgTug2Num = 0 '\0',
        vtTuNum = 0 '\0'}, ds3 = {sts1Num = 0 '\0', ds3Num = 0 '\0'}, ds1InDS3Line = {pad = 0 '\0', ds1Num = 0 '\0'},
      ds1InVT = {sts1Num = 0 '\0', pad = 0 '\0', tug3Num = 0 '\0', vtgTug2Num = 0 '\0', vtTuNum = 0 '\0'},
      ds1InDS3Path = {sts1Num = 0 '\0', tug3Num = 0 '\0', ds1Num = 0 '\0'}, e1InVT = {sts1Num = 0 '\0', pad = 0 '\0',
        tug3Num = 0 '\0', vtgTug2Num = 0 '\0', vtTuNum = 0 '\0'}, e3 = {sts1Num = 0 '\0', ds3Num = 0 '\0'}}},
  alarmId = 0, lineId = 0 '\0'}
        emPathType = PATH_NULL
        emAlarmId = 10

(gdb) l * 0x481a95b0
0x481a95b0 is in notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID (/vob/qnx/cema-common/msg/PathObjMsg.h:47).

42          PathObjMsg(
43              PATH_TYPE  pathTypeIn,
44              EM_PATH_ID pathIdIn,
45              PATH_OBJ_MSG_TYPE msgTypeIn,
46              EM_PATH_ALARM_ID alarmIdIn
**47          ): Message(MSG_SOURCE_PATH_OBJ)**
48          {
49              pathType = pathTypeIn;
50              pathId = pathIdIn;
51              msgType = msgTypeIn;
(gdb)bt
#notifyDs3PathAlarmClrEvent\uuuF9Path\uTypeUI17DS3\uPath\uAlarm\uID中的0 0x481a95b0(路径类型=路径空,路径ID=1215822164,
在/vob/qnx/cema common/msg/pathbjmsg.h:47处的报警\u Id=DS3\u路径\u空闲\u Id)
(gdb)英国电信全部
#notifyDs3PathAlarmClrEvent\uuuF9Path\uTypeUI17DS3\uPath\uAlarm\uID中的0 0x481a95b0(路径类型=路径空,路径ID=1215822164,
在/vob/qnx/cema common/msg/pathbjmsg.h:47处的报警\u Id=DS3\u路径\u空闲\u Id)
msg={msgSource=msg_SOURCE_无效,msgPriority=msg_PRIO_LOW,msgLength=0},
msgType=MSG\U PATH\U报警,pathType=PATH\U NULL,pathId={bay=0'\0',line=0'\0',PATH={stsn={
sts1Num=0'\0'},vt={sts1Num=0'\0',isTu3=0'\0',tug3Num=0'\0',vtgTug2Num=0'\0',,
vtTuNum=0'\0'},ds3={sts1Num=0'\0',ds3Num=0'\0'},ds1InDS3Line={pad=0'\0',ds1Num=0'\0'},
ds1InVT={sts1Num=0'\0',pad=0'\0',tug3Num=0'\0',vtgTug2Num=0'\0',vtTuNum=0'\0'},
ds1InDS3Path={sts1Num=0'\0',tug3Num=0'\0',ds1Num=0'\0'},e1InVT={sts1Num=0'\0',pad=0'\0',,
tug3Num=0'\0',vtgTug2Num=0'\0',vtTuNum=0'\0'},e3={sts1Num=0'\0',ds3Num=0'\0'},
alarmId=0,lineId=0'\0'}
类型=路径\空
emAlarmId=10
(gdb)l*0x481a95b0
0x481a95b0位于notifyDs3PathAlarmClrEvent\uuuF9Path\uTypeUI17DS3\uPath\uAlarm\uID(/vob/qnx/cema common/msg/pathBjMsg.h:47)中。
42(
43路径类型pathTypeIn,
44 EM_PATH_ID pathIdIn,
45路径\对象\消息\类型msgTypeIn,
46电磁路径报警ID报警ID
**47):消息(消息源路径对象)**
48          {
49 pathType=pathTypeIn;
50 pathId=pathIdIn;
51 msgType=msgTypeIn;
拆卸的O/p:

    bne-        0x481a962c <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+264>
0x481a959c <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+120>:  li      r0,15
0x481a95a0 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+124>:  mr      r27,r28
0x481a95a4 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+128>:  stw     r27,88(r1)
0x481a95a8 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+132>:  stw     r0,8(r1)
0x481a95ac <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+136>:  addi    r31,r1,8
0x481a95b0 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+140>:  li      r9,1
0x481a95b4 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+144>:  stw     r9,4(r31)
0x481a95b8 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+148>:  stw     r29,16(r31)
0x481a95bc <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+152>:  lwz     r0,88(r1)
0x481a95c0 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+156>:  stw     r9,12(r31)
0x481a95c4 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+160>:  stw     r0,20(r31)
0x481a95c8 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+164>:  stw     r5,24(r31)
0x481a95cc <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+168>:  lbz     r0,89(r1)
0x481a95d0 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+172>:  mr      r3,r31
0x481a95d4 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+176>:  stb     r0,28(r31)
0x481a95d8 <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+180>:  li      r4,32
0x481a95dc <notifyDs3PathAlarmClrEvent__F9PATH_TYPEUi17DS3_PATH_ALARM_ID+184>:
bne-0x481a962c
0x481a959c:li r0,15
0x481a95a0:r27、r28先生
0x481a95a4:stw r27,88(r1)
0x481a95a8:stw r0,8(r1)
0x481a95ac:addi r31,r1,8
0x481a95b0:li r9,1
0x481a95b4:stw r9,4(r31)
0x481a95b8:stw r29,16(r31)
0x481a95bc:lwz r0,88(r1)
0x481a95c0:stw r9,12(r31)
0x481a95c4:stw r0,20(r31)
0x481a95c8:stw r5,24(r31)
0x481a95cc:lbz r0,89(r1)
0x481a95d0:mr r3,r31
0x481a95d4:stb r0,28(r31)
0x481a95d8:li r4,32
0x481a95dc:
我以前的工作代码现在崩溃了。核心转储指向 正在调用构造函数。我已尝试获取bt、bt完整和 拆卸。我需要一些帮助来总结可能的原因 调用构造函数时出现分段错误?代码在QNX和 只有控制台gdb。本地变量都是0,怎么可能呢 那是什么意思?我需要一些帮助来总结可能的原因 调用构造函数时出现分段错误

请不要断定调用构造函数时可能(仅)存在问题。这可能会导致 仅仅是已经发生的其他事情(不好)的副作用。这将是困难的 从当前堆栈跟踪中找出问题。有时内存错误会非常严重 间歇性(由于不同的输入/线程/执行顺序的变化),程序可能运行数年而不显示任何问题的症状。 局部变量0可能表示它看起来正常,但我们无法从中得出任何结论

我确实觉得可能有一些内存损坏场景(在其他模块的其他地方)导致了此崩溃。您必须使用GDB/Valgrind调试代码(一些动态工具)找出根本问题。看起来你在QNX上遇到了这个问题,所以你可能需要运行Valgrind来识别代码中的问题。你可以参考我之前的文章


是的,我怀疑实际的问题位置可能在其他地方。我不确定我们是否可以在QNX上运行Valgrind。我们无法在GDB或Valgrind的exec模式下运行我们的程序。在这种情况下会有帮助吗?@Fatemammerchant:我很快检查了QNX平台上的Valgrind,它看起来好像没有在QNX上运行(我不太熟悉wirh QNX)。在这种情况下,使用GDB调试代码似乎是一种选择。对于与内存相关的问题,调试肯定比静态代码分析有用。我只是分享了我的观点,以便您可以从这个角度开始查看/分析。祝您好运。