首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++、调试符号和GDB

问C++、调试符号和GDB
EN

Stack Overflow用户
提问于 2014-09-07 09:10:02
回答 1查看 263关注 0票数 1

我们开发了一个动态库L.so和一个使用它的可执行文件X。都是用调试信息编译的。运行gdb X时:

从X...Segmentation故障读取符号(核转储)

X包含4个对象,我找出了造成崩溃的原因。让我们说,如果编译了S.cpp,它就会在gdb中崩溃。S.cpp:

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

如果从S.cpp中删除此方法,崩溃将消失:

代码语言:javascript
复制
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;
}

我想知道为什么是这样的,我在调试时能避免崩溃吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-07 13:32:56

这里通常要做的事情是运行"gdb gdb“,然后用堆栈跟踪来提交一个bug报告。

另一种可能是,您可以尝试更新到较新版本的gdb。也许能帮上忙。

不管怎么说,这只是个小虫子。非常新版本的gdb有一些针对此类崩溃的保护;但是,对所有崩溃进行保护是很困难的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25708671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档