程序運行報錯分析文檔

zry@huawei:~/src/modules/Connect$ ./newbuild/OpConnectAidTool 
\WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.
replace into `process_tracking` (`step_id`,`date`,`status`,`context_data`,`start_time`,`end_time`,`error_log`) values(?,?,?,?,?,?,?) 
Incorrect datetime value: '' for column 'end_time' at row 1
WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.
replace into `process_tracking` (`step_id`,`date`,`status`,`context_data`,`start_time`,`end_time`,`error_log`) values(?,?,?,?,?,?,?) 
=================================================================
==212612==ERROR: AddressSanitizer: stack-use-after-scope on address 0xffffc8f31e50 at pc 0xffff978997b0 bp 0xffffc8f312d0 sp 0xffffc8f31348
READ of size 11 at 0xffffc8f31e50 thread T0#0 0xffff978997ac in __interceptor_strlen ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:354#1 0xffff977bb6c4 in redisFormatSdsCommandArgv /root/temp-z/hiredis-master/hiredis.c:600#2 0xffff977bcce0 in redisAppendCommandArgv /root/temp-z/hiredis-master/hiredis.c:1164#3 0xffff977bcec4 in redisCommandArgv /root/temp-z/hiredis-master/hiredis.c:1216#4 0xaaaaad90210c in zryMyRedisTool::cleanExpiredFields(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (/home/zry/src/modules/Connect/newbuild/OpConnectAidTool+0x10310c)#5 0xaaaaad8dc744 in CConnectModuleAidTool::SaveProcessTrackingInfo(bool) /home/zry/src/modules/Connect/OpConnectAidTool.cpp:485#6 0xaaaaad8de9d0 in test_SaveProcessTrackingInfo() /home/zry/src/modules/Connect/OpConnectAidTool.cpp:521#7 0xaaaaad8dea0c in main /home/zry/src/modules/Connect/OpConnectAidTool.cpp:535#8 0xffff96c9ae0c in __libc_start_main ../csu/libc-start.c:308#9 0xaaaaad8d02bc  (/home/zry/src/modules/Connect/newbuild/OpConnectAidTool+0xd12bc)Address 0xffffc8f31e50 is located in stack of thread T0 at offset 384 in frame#0 0xaaaaad901bf8 in zryMyRedisTool::cleanExpiredFields(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (/home/zry/src/modules/Connect/newbuild/OpConnectAidTool+0x102bf8)This frame has 10 object(s):[32, 36) 'cleaned' (line 296)[48, 64) '<unknown>'[80, 96) '<unknown>'[112, 136) '<unknown>'[176, 200) '<unknown>'[240, 264) '<unknown>'[304, 336) 'zsetKey' (line 268)[368, 400) '<unknown>' <== Memory access at offset 384 is inside this variable[432, 464) '<unknown>'[496, 544) 'argv' (line 271)
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-scope ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:354 in __interceptor_strlen
Shadow bytes around the buggy address:0x200ff91e6370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000x200ff91e6380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000x200ff91e6390: 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 04 f20x200ff91e63a0: 00 00 f2 f2 00 00 f2 f2 00 00 00 f2 f2 f2 f2 f20x200ff91e63b0: 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2
=>0x200ff91e63c0: 00 00 00 00 f2 f2 f2 f2 f8 f8[f8]f8 f2 f2 f2 f20x200ff91e63d0: 00 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 f3 f30x200ff91e63e0: f3 f3 00 00 00 00 00 00 00 00 00 00 00 00 00 000x200ff91e63f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000x200ff91e6400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f10x200ff91e6410: f1 f1 f8 f2 f8 f2 f8 f2 01 f2 01 f2 04 f2 04 f2
Shadow byte legend (one shadow byte represents 8 application bytes):Addressable:           00Partially addressable: 01 02 03 04 05 06 07 Heap left redzone:       faFreed heap region:       fdStack left redzone:      f1Stack mid redzone:       f2Stack right redzone:     f3Stack after return:      f5Stack use after scope:   f8Global redzone:          f9Global init order:       f6Poisoned by user:        f7Container overflow:      fcArray cookie:            acIntra object redzone:    bbASan internal:           feLeft alloca redzone:     caRight alloca redzone:    cbShadow gap:              cc
==212612==ABORTING

2.1 報錯描述
在運行程序時,AddressSanitizer 報告了stack-use-after-scope錯誤,具體表現為程序試圖訪問已經超出作用域的棧內存。這通常是因為某些變量的作用域問題導致的。

2.2 報錯現象
運行程序時,AddressSanitizer 報告以下錯誤:

==212612==ERROR: AddressSanitizer: stack-use-after-scope on address 0xffffc8f31e50 at pc 0xffff978997b0 bp 0xffffc8f312d0 sp 0xffffc8f31348
READ of size 11 at 0xffffc8f31e50 thread T0

調用棧顯示錯誤發生在zryMyRedisTool::cleanExpiredFields函數中,具體是在調用redisCommandArgv時。

2.3 報錯原因

? 變量作用域問題:

? argvzsetKey的作用域可能在調用redisCommandArgv時已經結束。

? std::vector的生命周期問題,導致argv.data()指向的內存無效。

? std::vector的生命周期問題:

? 如果argv是一個std::vector,并且在調用redisCommandArgv之前被銷毀或重新分配,那么argv.data()指向的內存可能已經無效。

2.4 報錯分析

2.4.1 確認變量作用域
檢查zryMyRedisTool::cleanExpiredFields函數中所有變量的作用域,確保在調用redisCommandArgv時,所有變量仍然有效。

2.4.2 檢查argvzsetKey的生命周期
確保argvzsetKey在調用redisCommandArgv時仍然有效。可以通過以下方式解決:

? 將argvzsetKey的作用域提升到整個函數。

? 確保argvzsetKey在調用redisCommandArgv之前不會被銷毀或重新分配。

2.4.3 使用std::vector的正確方式
如果argv是一個std::vector,確保在調用redisCommandArgv時,argv的生命周期仍然有效。可以使用std::vectordata()方法獲取指針,但需要確保std::vector不會被重新分配。

2.5 代碼示例

2.5.1 錯誤代碼示例
以下是可能導致問題的代碼示例:

int zryMyRedisTool::cleanExpiredFields(const std::string &hashKey)
{if (cleanup_sha.empty() && !loadCleanupScript()){return -1; // 腳本加載失敗}const std::string zsetKey = hashKey + ":expires";const time_t now = time(nullptr);// argv 的生命周期可能在調用 redisCommandArgv 時已經結束std::vector<const char *> argv = {"EVALSHA",cleanup_sha.c_str(),"2",                        // KEYS 數量zsetKey.c_str(),            // 有序集合鍵 (KEYS[1])hashKey.c_str(),            // 哈希鍵 (KEYS[2])std::to_string(now).c_str() // 當前時間戳 (ARGV[1])};redisReply *reply = (redisReply *)redisCommandArgv(context, argv.size(), argv.data(), nullptr);if (!reply){ZRY_LOG_ERROR("cleanExpiredFields failed: no reply");return -1;}// 處理 NOSCRIPT 錯誤(腳本未加載)if (reply->type == REDIS_REPLY_ERROR &&std::strstr(reply->str, "NOSCRIPT") != nullptr){freeReplyObject(reply);cleanup_sha.clear();                // 重置 SHAreturn cleanExpiredFields(hashKey); // 重試}// 處理正常響應int cleaned = -1;if (reply->type == REDIS_REPLY_INTEGER){cleaned = reply->integer;ZRY_LOG_INFO("Cleaned {} fields from {}", cleaned, hashKey);}else if (reply->type == REDIS_REPLY_ERROR){ZRY_LOG_ERROR("Cleanup error: {}", reply->str);}freeReplyObject(reply);return cleaned;
}

2.5.2 修復代碼示例
以下是修復后的代碼示例:

int zryMyRedisTool::cleanExpiredFields(const std::string &hashKey)
{if (cleanup_sha.empty() && !loadCleanupScript()){return -1; // 腳本加載失敗}std::string zsetKey = hashKey + ":expires"; // 確保 zsetKey 的生命周期const time_t now = time(nullptr);std::vector<const char *> argv = {"EVALSHA",cleanup_sha.c_str(),"2",                        // KEYS 數量zsetKey.c_str(),            // 有序集合鍵 (KEYS[1])hashKey.c_str(),            // 哈希鍵 (KEYS[2])std::to_string(now).c_str() // 當前時間戳 (ARGV[1])};redisReply *reply = (redisReply *)redisCommandArgv(context, argv.size(), argv.data(), nullptr);if (!reply){ZRY_LOG_ERROR("cleanExpiredFields failed: no reply");return -1;}// 處理 NOSCRIPT 錯誤(腳本未加載)if (reply->type == REDIS_REPLY_ERROR &&std::strstr(reply->str, "NOSCRIPT") != nullptr){freeReplyObject(reply);cleanup_sha.clear();                // 重置 SHAreturn cleanExpiredFields(hashKey); // 重試}// 處理正常響應int cleaned = -1;if (reply->type == REDIS_REPLY_INTEGER){cleaned = reply->integer;ZRY_LOG_INFO("Cleaned {} fields from {}", cleaned, hashKey);}else if (reply->type == REDIS_REPLY_ERROR){ZRY_LOG_ERROR("Cleanup error: {}", reply->str);}freeReplyObject(reply);return cleaned;
}

2.6 Mermaid 圖表

為空
失敗
成功
不為空
失敗
成功
NOSCRIPT 錯誤
無錯誤
程序啟動
運行 cleanExpiredFields 函數
檢查 cleanup_sha 是否為空
加載清理腳本
檢查加載是否成功
返回 -1
繼續執行
構造 zsetKey 和 argv
調用 redisCommandArgv
檢查回復是否成功
記錄錯誤并返回 -1
處理 NOSCRIPT 錯誤
重置 SHA 并重試
處理正常響應
記錄清理結果
釋放 reply 對象
返回清理結果

2.7 其他注意事項

? MySQL 警告:

   WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.

這是一個 MySQL 的警告,表明MYSQL_OPT_RECONNECT已經被棄用,建議使用其他方式來處理重連邏輯。

? SQL 錯誤:

   Incorrect datetime value: '' for column 'end_time' at row 1

這是一個 SQL 錯誤,表明在插入數據時,end_time列的值為空字符串,而該列可能需要一個有效的日期時間值。需要檢查代碼中對end_time的賦值邏輯,確保其值有效。

2.8 總結
通過確保argvzsetKey的生命周期,可以解決stack-use-after-scope的問題。同時,需要檢查 MySQL 的重連邏輯和 SQL 插入語句的合法性,以避免其他潛在問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906364.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于flask+vue的電影可視化與智能推薦系統

基于flaskvue爬蟲的電影數據的智能推薦與可視化系統&#xff0c;能展示電影評分、評論情感分析等直觀的數據可視化圖表&#xff0c;還能通過協同過濾算法為用戶提供個性化電影推薦&#xff0c;幫助用戶發現更多感興趣的電影作品&#xff0c;具體界面如圖所示。 本系統主要技術架…

BYUCTF 2025

幾周沒會的比賽了&#xff0c;都是一題游。這周的BYU還不錯&#xff0c;難度適中&#xff0c;只是時間有點短。周末時間不夠。 Crypto Many Primes from Crypto.Util.number import bytes_to_long, getPrime import randomflag open("flag.txt").read().encode()…

鏈表的面試題8之環形鏈表

許久不見&#xff0c;那么這是最后倒數第三題了&#xff0c;這道題我們來看一下環形鏈表。 老規矩貼鏈接&#xff1a;141. 環形鏈表 - 力扣&#xff08;LeetCode&#xff09; 目錄 倒數第k個元素 獲取中間元素的問題。 雙指針 來&#xff0c;大致看一下題目&#xff0c;這…

在 JavaScript 中正確使用 Elasticsearch,第二部分

作者&#xff1a;來自 Elastic Jeffrey Rengifo 回顧生產環境中的最佳實踐&#xff0c;并講解如何在無服務器環境中運行 Elasticsearch Node.js 客戶端。 想獲得 Elastic 認證&#xff1f;查看下一期 Elasticsearch Engineer 培訓的時間&#xff01; Elasticsearch 擁有大量新…

2025年網站安全防御全解析:應對DDoS與CC攻擊的智能策略

2025年&#xff0c;隨著AI技術與物聯網設備的深度融合&#xff0c;DDoS與CC攻擊的規模與復雜度持續升級。攻擊者不僅利用T級流量洪泛沖擊帶寬&#xff0c;還通過生成式AI偽造用戶行為&#xff0c;繞過傳統防御規則。如何在保障業務高可用的同時抵御混合型攻擊&#xff1f;本文將…

window 安裝 wsl + cuda + Docker

WSL 部分參考這里安裝&#xff1a; Windows安裝WSL2 Ubuntu環境 - 知乎 如果出現錯誤&#xff1a; WslRegisterDistribution failed with error: 0x800701bc 需要運行&#xff1a;https://crayon-shin-chan.blog.csdn.net/article/details/122994190 wsl --update wsl --shu…

《MambaLLIE:基于隱式Retinex感知的低光照增強框架與全局-局部狀態空間建模》學習筆記

Paper:2405.16105 Github:GitHub - wengjiangwei/MambaLLIE 目錄 摘要 一、介紹 二、相關工作 2.1 低光圖像增強 2.2 視覺空間狀態模型 三、方法 3.1 預備知識 3.2 整體流程 3.3 全局優先-局部次之狀態空間塊 四、實驗 4.1 基準數據集與實施細節 4.2 對比實驗 4…

微信小程序:封裝request請求、解決請求路徑問題

一、創建文件 1、創建請求文件 創建工具類文件request.js,目的是用于發送請求 二、js接口封裝 1、寫入接口路徑 創建一個變量BASE_URL專門存儲api請求地址 2、獲取全局的token變量 從緩存中取出token的數據 3、執行請求 (1)方法中接收傳遞的參數 function request(url,…

【單機版OCR】清華TH-OCR v9.0免費版

今天向大家介紹一款非常好用的單機版OCR圖文識別軟件&#xff0c;它不僅功能多&#xff0c;識別能力強&#xff0c;而且還是免費使用的。OCR軟件為什么要使用單機版&#xff0c;懂得都懂&#xff0c;因為如果使用在線識別的OCR軟件&#xff0c;用戶需要將文檔上傳互聯網服務器的…

開源情報搜集系統:科研創新的強大引擎

一、引言 在當今全球化和信息化高度發展的時代&#xff0c;科研活動面臨著前所未有的機遇與挑戰。一方面&#xff0c;知識的更新換代速度極快&#xff0c;科研成果如雨后春筍般不斷涌現&#xff1b;另一方面&#xff0c;科研競爭日益激烈&#xff0c;如何在眾多科研團隊中脫穎…

產品生命周期不同階段的營銷策略

產品生命周期的不同階段&#xff08;導入期、成長期、成熟期、衰退期&#xff09;需要匹配差異化的營銷策略。以下是各階段的營銷重點及具體策略&#xff1a; 1. 導入期&#xff08;Introduction Stage&#xff09; 核心目標&#xff1a;建立市場認知&#xff0c;快速觸達目標…

Mujoco 學習系列(二)基礎功能與xml使用

這篇文章是 Mujoco 學習系列第二篇&#xff0c;主要介紹一些基礎功能與 xmI 使用&#xff0c;重點在于如何編寫與讀懂 xml 文件。 運行這篇博客前請先確保正確安裝 Mujoco 并通過了基本功能與GUI的驗證&#xff0c;即至少完整下面這個博客的 第二章節 內容&#xff1a; Mujoc…

面向SDV的在環測試深度解析——仿真中間件SIL KIT應用篇

1.引言 在汽車行業向軟件定義汽車&#xff08;SDV&#xff09;轉型的過程中&#xff0c;傳統硬件在環&#xff08;HIL&#xff09;測試方案因難以適應新的技術架構與需求&#xff0c;其局限性日益凸顯。傳統HIL對硬件依賴性強&#xff0c;擴展性差&#xff0c;更換ECU或傳感器…

windows使用anaconda安裝pytorch cuda版本

Windows安裝PytorchCUDA環境_使用conda安裝pytorch cuda10.2版本-CSDN博客

Axure中使用動態面板實現圖標拖動交換位置

要在Axure中實現圖標拖動交換位置的功能&#xff0c;可以通過動態面板結合交互事件來實現。 實現步驟 準備圖標元素 將每個圖標轉換為動態面板&#xff08;方便拖動和交互&#xff09;。 設置拖動交互 選中圖標動態面板 → 添加“拖動時”交互 → 選擇“移動”當前動態面板&am…

從零開始的嵌入式學習day24

標準IO 頭文件需求&#xff1a; #include <stdio.h>1.fopen和fclose (1)fopen fopen的函數功能是打開一個文件。 首先看看fopen的函數聲明&#xff1a; FILE *fopen(const char *path, const char *mode);第一個參數path是文件地址&#xff0c;傳入的是不可變的字符…

抓包分析工具與流量監控軟件

目錄 一、抓包分析工具&#xff1a;定位問題的“放大鏡” 1.1 工作原理簡述 1.2 主流工具盤點 1.3 抓包的實戰應用 二、流量監控軟件&#xff1a;網絡全景的“雷達系統” 2.1 功能特征 2.2 常用工具概覽 2.3 實戰應用場景 五、結語&#xff1a;深入可見&#xff0c;安…

DRIVEGPT4: 通過大語言模型實現可解釋的端到端自動駕駛

《DriveGPT4: Interpretable End-to-End Autonomous Driving via Large Language Model》 2024年10月發表&#xff0c;來自香港大學、浙江大學、華為和悉尼大學。 多模態大型語言模型&#xff08;MLLM&#xff09;已成為研究界關注的一個突出領域&#xff0c;因為它們擅長處理…

Vue3 Form 表單限制輸入小寫字母、數字和下劃線

方案一&#xff1a;Element Plus 表單驗證 <template><el-form :model"form" :rules"rules" ref"formRef" label-width"120px"><el-form-item label"用戶名" prop"username"><el-input v-m…

23、電網數據管理與智能分析 - 負載預測模擬 - /能源管理組件/grid-data-smart-analysis

76個工業組件庫示例匯總 電網數據管理與智能分析組件 1. 組件概述 本組件旨在模擬一個城市配電網的運行狀態&#xff0c;重點關注數據管理、可視化以及基于模擬數據的智能分析&#xff0c;特別是負載預測功能。用戶可以通過界面交互式地探索電網拓撲、查看節點狀態、控制時間…