回复:Bitcoind
首次公开证据
打开首次公开证据查看 1 个交叉存档
来源说明
Published on GitHub in February 2024 as part of Martti Malmi's testimony in the COPA v. Wright trial
问题出在 RecvUntil,但我仍然看不出它有什么不对。我唯一能想到的可能,就是套接字正在接收大量涌入的字符。
试试这个 irc.cpp。debug.log 可能会迅速增大,所以准备好终止它。
debug.log 已附上
这就把范围缩小了很多。debug.log 中没有打印任何 IRC 活动,所以我猜它不可能越过了 RecvUntil。粗略看去,我没发现任何明显的问题。我猜问题只能出在 ConnectSocket 或 RecvUntil 中。
用附上的 irc.cpp 和 net.cpp 试试,然后把 debug.log 发给我。
或者你可以在 gdb 中运行它,并逐步执行 ThreadIRCSeed gdb --args bitcoin [switches] b ThreadIRCSeed run step 或者用 u 跨过例程并从中退出。
不管是否使用 getinfo,我都会遇到这个错误。注释掉 ThreadIRCSeed 后问题就解决了。
如果你没有执行 getinfo,它还会这样吗?
你可以注释掉下面列出的 CreateThreads,然后逐个重新启用,直到它再次出现。这样我们就能知道问题出在哪个线程里。
net.cpp,在 // Start threads 下 CreateThread(ThreadIRCSeed, NULL) CreateThread(ThreadSocketHandler, NULL, true) CreateThread(ThreadOpenConnections, NULL) CreateThread(ThreadMessageHandler, NULL)
init.cpp: CreateThread(ThreadRPCServer, NULL);
发来了。我忘了提崩溃时的错误消息:
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
你能把 debug.log 发给我吗?
我试着用 ddd 调试器调试我构建的 bitcoind,但 目前还没取得多少进展。它总是会占用系统的全部 内存,最后崩溃。能否请你再把最新的 64 位 bitcoind 构建版本发给我,让我看看问题是不是出在 我的构建上?
英文原文
展开英文原文
It's in RecvUntil, but I still can't see anything wrong with it. The only thing I can think of is if the socket is receiving a spew of characters.
Try this irc.cpp. debug.log may grow rapidly so be ready to kill it.
debug.log attached
That narrows it down a lot. It didn't print any IRC activity in debug.log, so I guess it couldn't have gotten past the RecvUntil. Eyeballing it I don't see anything obvious. I guess it would have to be either in ConnectSocket or RecvUntil.
Try it with the attached irc.cpp and net.cpp and send me the debug.log.
Or you could run it in gdb and step through ThreadIRCSeed gdb --args bitcoin [switches] b ThreadIRCSeed run step or u to step over and up out of routines.
I get the error regardless of the getinfo. Commenting out ThreadIRCSeed fixed the problem.
Does it still do it if you didn't do getinfo?
You could comment out the CreateThreads listed below, then re-enable them one at a time until it does it again. Then we would know which thread the problem is in.
net.cpp, under // Start threads CreateThread(ThreadIRCSeed, NULL) CreateThread(ThreadSocketHandler, NULL, true) CreateThread(ThreadOpenConnections, NULL) CreateThread(ThreadMessageHandler, NULL)
init.cpp: CreateThread(ThreadRPCServer, NULL);
Here goes. I forgot to mention the crash error message:
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
Could you send me the debug.log?
I tried debugging my build of bitcoind with ddd debugger, but didn't have much success yet. It always ends up taking all the system's memory and finally crashes. Could you please send me again the latest 64 bit build of bitcoind, so I can see if the problem is about my build?