我正在处理我怀疑是在使用QNetworkAccessManager
. 完整的源代码可在此处获得。
从日志输出来看,我猜这个 bug 是在calendar.cpp第 44 行的异步请求之后触发的。我没有确凿的证据。我只注意到第 45 行的消息大部分时间是最后一条日志消息。
这是第 39-46 行:
void Calendar::update()
{
// Start calendar download asynchronously. After retrieving the
// file, parseNetworkResponse will take over.
Logger::instance()->add(CLASSNAME, "Fetching update for 0x" + QString::number((unsigned)this, 16) + "...");
_naMgr.get(QNetworkRequest(_url));
Logger::instance()->add(CLASSNAME, "Update request for 0x" + QString::number((unsigned)this, 16) + " was filed.");
}
这个 HTTP GET 请求由Calendar::parseNetworkResponse
连接到_naMgr
'finished
信号的插槽处理。这是第 170-174 行:
void Calendar::parseNetworkResponse(QNetworkReply* reply) {
// TODO: we suspect that sometimes a SIGSEGV occurs within the bounds
// of this function. We'll remove the excessive log calls when we've
// successfully tracked down the problem.
Logger::instance()->add(CLASSNAME, "Got update response for 0x" + QString::number((unsigned)this, 16) + ".");
即使第 45 行的日志消息不是崩溃后出现在日志中的最后一条消息,日志中总是有一个更新请求,而第 174 行的日志消息从未跟进过。这让我相信HTTP GET 请求可能会破坏这里的东西。提交 GET 请求的 URL 似乎是正确的。
我认为涉及内存损坏的原因之一是即使输入日历列表和我的互联网连接状态保持不变,该错误也不会始终弹出。(我可以用至少 2 个日历触发错误。)此外,当我试图了解有关故障点的更多信息时,我看到了这个 GCC 输出。我会从valgrind
的内存检查器收集输出以收集其他信息,但目前我附近没有可用的 Linux 安装。
Can this bug be related to incorrect use of Qt's network libraries from my side? Have you got any other theories as to what might be causing the issue? This is my first time dealing with possible stack corruption and since I'm doing this solo hobby project in my spare time I don't have anyone to train me in dealing with these issues.