【问题标题】:Debug Core dump in QNX - How to get more info?在 QNX 中调试核心转储 - 如何获取更多信息?
【发布时间】:2014-04-08 05:09:20
【问题描述】:

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

这里是o/p:

(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;

反汇编的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>:

【问题讨论】:

    标签: gdb coredump qnx


    【解决方案1】:

    我以前工作的代码现在崩溃了。核心转储指向 构造函数被调用。我试图让 bt, bt full and 拆卸。我需要一些帮助来得出可能导致的结论 调用构造函数时出现分段错误?代码在 QNX 上运行 只有控制台 gdb。局部变量全为0,怎么办 那是什么意思?我需要一些帮助来得出可能导致的结论 调用构造函数时出现分段错误?

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

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

    https://stackoverflow.com/a/22658693/2724703

    【讨论】:

    • 是的,我怀疑实际有问题的位置可能在其他地方。我不确定我们是否可以在 QNX 上运行 Valgrind。我们不能在 GDB 或 Valgrind 的 exec 模式下运行我们的程序。在这种情况下会有所帮助吗?
    • @FatemaMerchant:我很快检查了 QNX 平台上的 Valgrind,看起来它不能在 QNX 上运行(我不太熟悉 QNX)。那么在这种情况下,使用 GDB 调试代码似乎是一种选择。对于内存相关问题,调试肯定比静态代码分析有用。我刚刚分享了我的观点,以便您应该从这个角度开始查看/分析它。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多