【问题标题】:Vala int.parse crashingVala int.parse 崩溃
【发布时间】:2013-12-26 00:34:30
【问题描述】:

我想构建一个简单的工具来检查 SVN 修订号更改(= 有人提交),但我遇到了一个非常奇怪的问题。 当我编译并运行我的代码时,会打印以下第一条消息,而下一条则不会:

while (true) {
    var msg = new Soup.Message("GET", this.repo.URL);
    session.send_message(msg);
    MatchInfo matchInfo;
    pattern.match((string)msg.response_body.data, 0, out matchInfo);
    var revisionString = matchInfo.fetch_named("revision");
    stdout.printf("Current Revision: [%s]\n", revisionString);
    var currentRevision = int.parse("383");
    stdout.printf("Current Revision parsed %d", currentRevision);
    Thread.usleep(150000000);
}

我插入硬编码字符串"383" 只是为了测试,但它仍然失败。 我也看不出 printf 有什么问题,也没有编译器错误。
如果有帮助,我可以发布更多代码。

【问题讨论】:

    标签: vala


    【解决方案1】:

    int.parse 只是调用atoi。您可以通过查看生成的 C 来验证这一点。

    atoi 不是线程安全的,我假设由于您的Thread.usleep,您正在多个线程中运行它。

    改用int64.try_parse,它基于strtoll

    另外,尝试一个不涉及this.repo.LastRevision 的更简单的测试用例。

    【讨论】:

    • 不幸的是,这并没有改变任何东西。但是我刚刚发现添加 stdout.flush() 可以解决我插入的调试消息的问题。
    • 你能发布一个关于这个问题的最小案例吗?因为int.parse("383") 一个人对我有用。
    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多