2014-04-08 7 views
0

이전에 작동했던 코드가 지금 중단됩니다. 코어 덤프는 호출되는 생성자를 가리 킵니다. 나는 bt, bt 전체 및 해체를 얻으려고 노력했다. 생성자를 호출하는 동안 세분화 오류를 일으킬 수있는 것을 결론 짓기 위해 도움이 필요합니까? 코드는 QNX에서 실행되며 콘솔 gdb 만 있습니다. 지역 변수는 모두 0입니다. 그게 무슨 뜻입니까? 분해의QNX에서 코어 덤프 디버그 - 자세한 정보를 얻으려면 어떻게합니까?

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

답변

0

내 이전 작업 코드는 이제 충돌

다음은 O/P입니다. 코어 덤프는 호출되는 생성자를 가리 킵니다. 나는 bt를 얻으려고 노력했는데, bt가 가득하고 해체. 생성자를 호출하는 동안 세그먼트 화 오류가 발생할 수 있다고 결론을 내리는 데 도움이 필요합니까? 코드는 QNX에서 실행되고 에는 콘솔 gdb 만 있습니다. 로컬 변수는 모두 0입니다. 은 무엇을 의미합니까? 생성자를 호출하는 동안 세그먼트 화 오류가 발생할 수 있다고 결론을 내리는 데 도움이 필요합니까?

생성자를 호출하는 동안 문제가있을 수 있다고 결론 지어서는 안됩니다. 이것은 이미 발생할 수있는 다른 것 (부적절한)의 부작용 일 수 있습니다. 현재 스택 추적에서 문제를 파악하는 것이 어려울 것입니다. 언젠가 메모리 버그에있을 것입니다 매우 , 그리고 문제의 증상을 표시하지 않고 수년 동안 실행할 수 있습니다 프로그램 (인해 다른 입력/스레딩/실행의 순서로 변화) 간헐적. 지역 변수 0은 괜찮아 보이지만 아무 것도 결론 지을 수 없음을 나타낼 수 있습니다.

(다른 모듈의 다른 곳) 메모리 손상이 일 수 있다고 생각합니다.이 충돌을 이끌고 있습니다. 루트 문제를 찾으려면 GDB/Valgrind (일부 동적 도구)을 사용하여 코드를 디버그해야합니다. QNX에서이 문제가 발생하는 것처럼 보이므로 Valgrind를 실행하여 코드에서 문제를 식별 할 수 있습니다. 당신은 내 이전 게시물

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

+0

예를 참조 할 수 있습니다, 나는 실제 문제가있는 위치가 다른 곳이 될 수 있다고 의심. QNX에서 Valgrind를 실행할 수 있는지 확실하지 않았습니다. 우리는 GDB 나 Valgrind의 exec 모드에서 프로그램을 실행할 수 없습니다. 이 경우 도움이 될까요? –

+0

@FatemaMerchant : 나는 빨리 QNX 플랫폼에서 Valgrind의에 대해 확인하고 그것이 (내가 QNX wirh 매우 익숙하지 않은 오전) QNX에서 실행되지 않습니다처럼 보인다. 이 경우에는 GDB를 사용하여 코드를 디버깅하는 것이 옵션 인 것 같습니다. 디버깅은 메모리 관련 문제에 대한 정적 코드 분석보다 유용 할 것입니다. 방금 내 관점을 공유 했으므로이 관점에서보고 분석해야합니다. 행운을 빕니다. –