동적 라이브러리 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;
}
나는 왜 이렇게 궁금해하고 디버깅하는 동안 나는 충돌을 피할 수 있습니까?
다른 디버거에로드 해 보셨습니까? lldb? –