2014-09-07 2 views
1

동적 라이브러리 L.so와이를 사용하는 실행 파일 X를 개발했습니다. 둘 다 디버깅 정보로 컴파일됩니다. gdb를 X 실행하는 동안 : X에서C++, 디버깅 기호 및 GDB

읽기 기호 ... 분할 오류 (코어 덤프)

은 X는 4 개체에서 포함하고 나는 충돌이 발생하는 하나 발견했다. 말하자면, S.cpp가 컴파일되면 gdb에서 충돌합니다. S.cpp : 나는이 S.cpp에서이 방법을 제거하는 경우

class Service { private: ... private: ... LongTaskService longTaskService_; // Implementation is in L.so

, 충돌이 사라집니다 :

bool Service::downloadFile(const string &mapName, int &taskId) { 
    Properties dProps; 
    if(!config_.get("downloadService", dProps)) { 
    LOGG(Logger::ERROR) << "Failed to get config props for downloadService" << Logger::FLUSH; 
    return false; 
    } 
    string url = dProps.get("downloadUrl"); 
    if(url == "") { 
     LOGG(Logger::ERROR) << "Failed to get url for downloadService" << Logger::FLUSH; 
     return false; 
    } 
    if(url[url.size()-1] != "/") 
     url += "/"; 

    LOGG(Logger::DEBUG) << "Initializing download from "<< url << mapName << Logger::FLUSH; 
    URL dUrl(url+mapName); 
    vector<string> outPath = {workDir_, mapName}; 
    URL outFile(FsUtil::makePath(outPath)); 
    taskId = longTaskService_.submit(DownloadTask::run, dUrl, outFile); // This line causes problems 
    return true; 
} 

나는 왜 이렇게 궁금해하고 디버깅하는 동안 나는 충돌을 피할 수 있습니까?

+0

다른 디버거에로드 해 보셨습니까? lldb? –

답변

1

여기서 할 일은 "gdb gdb"를 실행 한 다음 스택 추적과 함께 버그 보고서를 제출하는 것입니다.

또 다른 가능성은 gdb의 최신 버전으로 업데이트 할 수 있다는 것입니다. 그게 도움이 될거야.

어쨌든 그것은 단지 버그 일뿐입니다. 아주 새로운 버전의 gdb는 이러한 종류의 충돌과 관련하여 약간의 보호 기능을 제공합니다. 그러나 모든 충돌에 대비하여 보호하는 것은 어렵습니다.