実は、代わりにこちらを試してほしい。こちらの方がより正確だ:
void ParseString(const string& str, char c, vector<string>& v)
{
string::size_type i1 = 0;
string::size_type i2;
loop
{
i2 = str.find(c, i1);
if (i2 == str.npos)
{
v.push_back(str.substr(i1));
return;
}
v.push_back(str.substr(i1, i2-i1));
i1 = i2+1;
}
}
Satoshi Nakamoto wrote:
util.cのParseStringに問題がある。「unsigned int」型とstr.nposの型であるsize_typeの間の非互換性が原因だと推測している。
2つの「unsigned int」を「size_type」に変更してみてほしい。
old: void ParseString(const string& str, char c, vector
& v) { unsigned int i1 = 0; unsigned int i2; do { i2 = str.find(c, i1); v.push_back(str.substr(i1, i2-i1)); i1 = i2+1; } while (i2 != str.npos); } new: void ParseString(const string& str, char c, vector
& v) { size_type i1 = 0; size_type i2; do { i2 = str.find(c, i1); v.push_back(str.substr(i1, i2-i1)); i1 = i2+1; } while (i2 != str.npos); } mmalmi@cc.hut.fi wrote:
gdbでデバッグ中に取得した別のテストランのdebug.logを送る。プログラムはデバッグ行「irc 8」の後にメモリを食い始め、数秒以内に「terminate called after throwing an instance of ‘std::bad_alloc’」でクラッシュした。
RecvUntilの中にあるようだが、まだ何が問題なのか分からない。考えられるのは、ソケットが大量の文字を受信している場合くらいだ。
このirc.cppを試してみてほしい。debug.logが急速に大きくなる可能性があるので、すぐに終了できるよう準備しておいてくれ。
mmalmi@cc.hut.fi wrote:
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でルーチンのステップオーバーとステップアウト。
mmalmi@cc.hut.fi wrote:
getinfoに関係なくエラーが発生する。ThreadIRCSeedをコメントアウトしたところ、問題が解決した。
getinfoをしなくても同じ現象が起きるか?
以下のCreateThreadsをコメントアウトして、1つずつ有効にしていけば、どのスレッドに問題があるか分かる。
net.cpp, under // Start threads CreateThread(ThreadIRCSeed, NULL) CreateThread(ThreadSocketHandler, NULL, true) CreateThread(ThreadOpenConnections, NULL) CreateThread(ThreadMessageHandler, NULL)
init.cpp: CreateThread(ThreadRPCServer, NULL);
mmalmi@cc.hut.fi wrote:
送る。クラッシュ時のエラーメッセージを伝え忘れていた:
terminate called after throwing an instance of ‘std::bad_alloc’ what(): std::bad_alloc
debug.logを送ってもらえるか?
mmalmi@cc.hut.fi wrote:
dddデバッガでbitcoindのビルドをデバッグしようとしたが、まだうまくいっていない。いつもシステムのメモリを全部使い切って最終的にクラッシュしてしまう。最新の64ビット版bitcoindのビルドをもう一度送ってもらえるか?自分のビルドの問題なのか確認したい。
出典:COPA対ライト裁判の証言の一環として、2024年2月にマルッティ・マルミによりGitHubで公開。完全な書簡アーカイブはmmalmi.github.io/satoshi/で閲覧可能。