gpt4 book ai didi

C++、调试符号和 GDB

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:41 26 4
gpt4 key购买 nike

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

从 X 中读取符号...段错误(核心已转储)

X 包含 4 个对象,我找出了导致崩溃的对象。比方说,如果编译了 S.cpp,它会在 gdb 中崩溃。 S.cpp:

类服务{
私有(private)的:
...
私有(private)的:
...
LongTaskService longTaskService_;//实现在 L.so 中

如果我从 S.cpp 中删除这个方法,崩溃就会消失:

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;
}

我想知道为什么会这样,我可以避免调试时崩溃吗?

最佳答案

这里通常要做的是运行“gdb gdb”,然后使用堆栈跟踪提交错误报告。

另一种可能性是您可以尝试更新到更新版本的 gdb。这可能会有所帮助。

无论如何,这只是一个错误。非常新的 gdb 版本对这类崩溃有一些保护;但是很难防止所有崩溃。

关于C++、调试符号和 GDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25708671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com