나는 응용 프로그램을 디버깅 중이고 segfault를 일으키는 인스턴스가 많은 인스턴스를 결정하는 것이 거의 불가능한 위치에서 segfaults를 발생시킵니다.gdb를 사용하여 객체가 인스턴스화 된 위치를 어떻게 알 수 있습니까?
개체가 생성 된 위치를 확인할 수 있으면 문제가 발생한 인스턴스를 파악하고 버그를 해결할 수 있다고 생각했습니다.
이 정보를 검색하려면 gdb (또는 다른 응용 프로그램)가 물론 기본 malloc/new/new [] 구현을 재정의해야하지만 내 응용 프로그램을 설치하는 것은 괜찮습니다.
하나는 내가 단지 일 전에 라인에 그 세그먼테이션 폴트 (segfault)를 중단 점을 넣을 수 있다고 주장하고 거기에서 객체로 단계, 그러나 문제는 이것이 다른 많은에게 를 처리하는 중앙 메시지 발송자 루프 것입니다 수 메시지와 나는 오작동하는 객체를 잡는 방식으로 중단 점 조건을 설정할 수 없다.
질문에 대한 직접적인 대답은 아니지만 valgrind/memcheck에서 실행 해 보았습니까? –
http://linux.die.net/man/3/efence도 살펴볼 수 있습니다.이 경우에 도움이 될 것 같습니다. –
전화하세요. 나는 가지고 있고 저에게 "크기 4의 잘못된 읽기"를 주었다. 그러나 그것은 메시지 디스패처 루프 자체의 반복자에 대해서만 지적했습니다. 이게 실제로 문제가되는 것, 즉 반복되는 std :: list가 루프 내에서 변경되고있는 것으로 의심됩니다. 따라서이 부분을 자세히 살펴볼 것입니다. – anorm