簡體   English   中英

“~__vector_base() ”在 Wasm 中運行時間過長以及中止錯誤。 找不到錯誤

[英]“~__vector_base() ” having an excess run time in Wasm as well as an abort error. Cannot find the error

我已經編寫了一個程序來執行登錄過程並且運行良好,但是當我返回並注意到一個動態分配的變量(一個對象)沒有被刪除時,我糾正了這個問題,發現我的程序非常慢,大約需要每一步 3 秒,以前是即時的。

我在調試模式下編譯,我注意到的第一件事就是調用了所有 abort() 錯誤。

在此處輸入圖像描述

然后我在 chrome 工具中運行了一個配置文件,給出了這個結果。

在此處輸入圖像描述

這是解構的堆棧跟蹤,

_WoWAuthHandler::handleServerData(WoWPacket*)
   _WoWPacket::~WoWPacket()
      _Packet::~Packet()
         _Buffer::~Buffer()
            _Buffer::clear()

這是 ~Buffer() 的代碼(不是我的代碼)

Buffer::~Buffer() {
     clear();
}

緩沖區::清除()

void Buffer::clear() noexcept {
    buffer.clear();
    readOffset = 0;
    writeOffset = 0;
}

buffer 是一個基本的 std::vector,但 std::vector.clear() 不包含在堆棧跟蹤中,似乎不是問題。

我將 ~Buffer() 修改為一個空的 function 並運行另一個配置文件但是,這只會讓它更加混亂。

在此處輸入圖像描述

這是 demanged 的堆棧跟蹤。

_WoWAuthHandler::handleServerData(WoWPacket*)
   _WoWPacket::~WoWPacket()
      _Packet::~Packet()
         _Buffer::~Buffer()
            _std::__2::vector<unsigned char, std::__2::allocator<unsigned char> >::~vector()
              _std::__2::__vector_base<unsigned char, std::__2::allocator<unsigned char> >::~__vector_base()

~Buffer() 不調用任何東西。

我可以控制這種巨大的延遲發生,但它涉及刪除對第一個變量的刪除調用。 不是一個選項,因為該變量是動態創建的。

void Socket::serverToHandler(int dataptr, int len) {
    uint8_t* dataraw = (uint8_t*)dataptr;
    std::vector<uint8_t>* dataParsed = Socket::parsePacket(dataraw, len);

    WoWPacket* dataReader = new WoWPacket(dataParsed);
    wowHandler->handleServerData(dataReader);
    delete dataReader;//If this is removed, the code runs without issue. However, it lags a huge amount with it. 

    delete dataraw;
    delete dataParsed;
}

我相信這可能是 emscripten 本身的錯誤。

如果我使用 -g0 和 -O0 編譯,它會編譯上面的錯誤但不更改任何代碼,我可以使用 -g0 和 -O1 進行編譯以使其編譯正常。

如果我用 -g4 和 -O1 編譯,它會編譯上面的錯誤,但如果我用 -g2 和 -O1 編譯,它會編譯得很好,並且有足夠的調試信息來滿足我的喜好。

我正在使用版本 1.38.31

該解決方案對我有用,如果將來有人遇到此錯誤,請留下答案。


更新:它回來了,意識到我兩次釋放了同一個指針。 該死的模糊 C++ 錯誤消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM