高通camx IOVA內存不足,導致10-15x持續拍照后,點擊拍照鍵定屏無反應,過一會相機閃退

定屏閃退問題分析思路:

  1. 定屏問題如果是相機問題,一般會出現返幀,導致預覽卡死。當然還有其他情況,我們先看返幀情況,發現request和result開始都正常,到12:53:05.443038就沒有返幀了,定屏了。往下排查。
行 53944: 01-01 12:53:03.429684  1825 16891 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:1810 process_capture_request()     output_buffers[0] : 0xb400007c12beeb80, buffer: 0x7e15dbeb40, status: 00000000, stream: 0xb400007d52135ea8行 53945: 01-01 12:53:03.429696  1825 16891 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:1810 process_capture_request()     output_buffers[1] : 0xb400007c12beeba0, buffer: 0x7e15dbeb40, status: 00000000, stream: 0xb400007d52135ba8行 56194: 01-01 12:53:04.423164  1825  3582 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2075 process_capture_result() frame_number 584, partial_result 1, result 0xb400007d52c0d780, num_physcam_metadata 0, num_output_buffers 0行 56385: 01-01 12:53:04.446711  1825  3582 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2075 process_capture_result() frame_number 581, partial_result 2, result 0xb400007d21c2b0c0, num_physcam_metadata 1, num_output_buffers 0行 56442: 01-01 12:53:04.456509  1825  3582 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2075 process_capture_result() frame_number 581, partial_result 0, result 0x0, num_physcam_metadata 0, num_output_buffers 1行 56443: 01-01 12:53:04.456514  1825  3582 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2106 process_capture_result()     output_buffers[0] : 0xb400007ca6da5700, buffer: 0xb400007caa52f758, status: 00000000, stream: 0xb400007d52135ea8行 56495: 01-01 12:53:04.457988  1825  3580 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2075 process_capture_result() frame_number 580, partial_result 0, result 0x0, num_physcam_metadata 0, num_output_buffers 1行 56496: 01-01 12:53:04.457994  1825  3580 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2106 process_capture_result()     output_buffers[0] : 0xb400007ca6da5700, buffer: 0xb400007ca72d9178, status: 00000000, stream: 0xb400007d52135ba8行 58262: 01-01 12:53:05.443033  1825  3581 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2075 process_capture_result() frame_number 605, partial_result 0, result 0x0, num_physcam_metadata 0, num_output_buffers 1行 58263: 01-01 12:53:05.443038  1825  3581 I CamX    : [CONFIG][HAL    ] camxhal3.cpp:2106 process_capture_result()     output_buffers[0] : 0xb400007ca6da5700, buffer: 0xb400007ca63e6918, status: 00000000, stream: 0xb400007d52135ba8
  1. 發現日志里有crash日志,camx hal在12:53:05.931crash了,這個時間前面已經出現問題了,導致定屏并crash。
01-01 12:53:06.362630 24257 24257 F DEBUG   : Timestamp: 2024-01-01 12:53:05.931813851+0800
01-01 12:53:06.362634 24257 24257 F DEBUG   : Process uptime: 0s
01-01 12:53:06.362642 24257 24257 F DEBUG   : Cmdline: /vendor/bin/hw/vendor.qti.camera.provider@2.7-service_64
01-01 12:53:06.362646 24257 24257 F DEBUG   : pid: 1825, tid: 3581, name: SoloTMgr_1  >>> /vendor/bin/hw/vendor.qti.camera.provider@2.7-service_64 <<<
01-01 12:53:06.362652 24257 24257 F DEBUG   : uid: 1047
01-01 12:53:06.362658 24257 24257 F DEBUG   : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
01-01 12:53:06.362663 24257 24257 F DEBUG   : pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
01-01 12:53:06.362669 24257 24257 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0000000000000000
01-01 12:53:06.362674 24257 24257 F DEBUG   : Cause: null pointer dereference
01-01 12:53:06.362678 24257 24257 F DEBUG   : Abort message: 'otp info index = 0 :value = 6500, (0.523098, 0.535230), (0.522952, 0.531020) !'
01-01 12:53:06.362689 24257 24257 F DEBUG   :     x0  b400007bc959f000  x1  0000000000000001  x2  0000000000000000  x3  0000000000000002
01-01 12:53:06.362694 24257 24257 F DEBUG   :     x4  b400007c25350618  x5  0000000000000000  x6  0000000000000000  x7  00000000ffffffff
01-01 12:53:06.362700 24257 24257 F DEBUG   :     x8  0000007d92de5000  x9  0000007d91afcdf0  x10 0000000000000dfd  x11 0000000000000150
01-01 12:53:06.362705 24257 24257 F DEBUG   :     x12 000000000000000d  x13 0000007c25200000  x14 0000000000000020  x15 0000000000000000
01-01 12:53:06.362710 24257 24257 F DEBUG   :     x16 0000000000000001  x17 0000007e1792ccac  x18 b400007cb2cadc40  x19 0000000000000000
01-01 12:53:06.362715 24257 24257 F DEBUG   :     x20 0000000000000001  x21 0000007d35f0afd0  x22 0000000000000001  x23 0000007d93a283a8
01-01 12:53:06.362720 24257 24257 F DEBUG   :     x24 00000000000009a0  x25 b400007bc95bf340  x26 0000007d35e890a0  x27 0000000000000000
01-01 12:53:06.362726 24257 24257 F DEBUG   :     x28 b400007bc95b7060  x29 0000007d35e52b90
01-01 12:53:06.362731 24257 24257 F DEBUG   :     lr  0044e67d9203f61c  sp  0000007d35e52b70  pc  0000007d92c34a68  pst 0000000080001000
01-01 12:53:06.362737 24257 24257 F DEBUG   : 8 total frames
01-01 12:53:06.362741 24257 24257 F DEBUG   : backtrace:
01-01 12:53:06.362749 24257 24257 F DEBUG   :       #00 pc 000000000140aa68  /vendor/lib64/hw/camera.qcom.so (CamX::Node::GetCmdBufferForRequest(unsigned long, CamX::CmdBufferManager*)+48) (BuildId: bf5bd295751ef5290f0cfc3d8c2839df)
01-01 12:53:06.362757 24257 24257 F DEBUG   :       #01 pc 0000000000815618  /vendor/lib64/hw/camera.qcom.so (CamX::IPENode::ExecuteProcessRequest(CamX::ExecuteProcessRequestData*)+71296) (BuildId: bf5bd295751ef5290f0cfc3d8c2839df)
01-01 12:53:06.362762 24257 24257 F DEBUG   :       #02 pc 00000000013ee268  /vendor/lib64/hw/camera.qcom.so (CamX::Node::ProcessRequest(CamX::NodeProcessRequestData*, unsigned long)+9720) (BuildId: bf5bd295751ef5290f0cfc3d8c2839df)
01-01 12:53:06.362767 24257 24257 F DEBUG   :       #03 pc 000000000135ff60  /vendor/lib64/hw/camera.qcom.so (CamX::DeferredRequestQueue::DeferredWorkerWrapper(void*) (.cfi)+680) (BuildId: bf5bd295751ef5290f0cfc3d8c2839df)
01-01 12:53:06.362773 24257 24257 F DEBUG   :       #04 pc 000000000002d8f4  /vendor/lib64/libcamxcommonutils.so (CamX::ThreadCore::DispatchJob(CamX::RuntimeJob*)+628) (BuildId: b72d1bc00ef4147f5e1d08acf77e8bd9)
01-01 12:53:06.362778 24257 24257 F DEBUG   :       #05 pc 000000000002e8b4  /vendor/lib64/libcamxcommonutils.so (CamX::ThreadCore::WorkerThreadBody
  1. 我們看下這個和buffer相關的crash當前線程情況。發現并沒有特別報錯。
    行 131: 01-01 12:53:05.451298  1825  3581 I CamX    : [ INFO][CORE   ] camxpipeline.cpp:1998 ProcessRequest() Pipeline:MultiCameraCustomSATEIS0_0_cam_2 requestId:608, Tuning mode: default 0, sensor 24, usecase 0, feature1, 23 feature2 0, scene 0, effect 0行 133: 01-01 12:53:05.451302  1825  3581 I CamX    : [ INFO][CORE   ] camxpipeline.cpp:2046 ProcessRequest() Pipeline::MultiCameraCustomSATEIS0_0_cam_2 last submitted request updated to 608 pointer:0xb400007c900ff000行 135: 01-01 12:53:05.451334  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: cb0a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.smooth_transition1_cam2, fence: b4e62020(9), Port: 0, portIndex 0 reqId: 608, ImgBuf: 0x0, portidx/groupID 1 result: 0 行 137: 01-01 12:53:05.451346  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9595 SetupRequestOutputPortFence() CreatePrivateFence...Node: cb0a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.smooth_transition1_cam2, fence: b4e65820(12), ImgBuf:0x0 reqId:608 result: 0行 138: 01-01 12:53:05.451385  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: 845eb000, Node::MultiCameraCustomSATEIS0_com.qti.node.gpu0_cam2, fence: b4e54020(14), Port: 1, portIndex 0 reqId: 608, ImgBuf: 0x0, portidx/groupID 1 result: 0 行 139: 01-01 12:53:05.451392  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9595 SetupRequestOutputPortFence() CreatePrivateFence...Node: 845eb000, Node::MultiCameraCustomSATEIS0_com.qti.node.gpu0_cam2, fence: b4e57820(19), ImgBuf:0x0 reqId:608 result: 0行 143: 01-01 12:53:05.451786  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: 845eb000, Node::MultiCameraCustomSATEIS0_com.qti.node.gpu0_cam2, fence: b4e5b020(21), Port: 2, portIndex 1 reqId: 608, ImgBuf: 0x0, portidx/groupID 2 result: 0 行 144: 01-01 12:53:05.451796  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9595 SetupRequestOutputPortFence() CreatePrivateFence...Node: 845eb000, Node::MultiCameraCustomSATEIS0_com.qti.node.gpu0_cam2, fence: b4e5e820(22), ImgBuf:0x0 reqId:608 result: 0行 145: 01-01 12:53:05.451831  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: bd2a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.eisv23_cam2, fence: b4e70020(24), Port: 0, portIndex 0 reqId: 608, ImgBuf: 0x0, portidx/groupID 1 result: 0 行 146: 01-01 12:53:05.451838  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9595 SetupRequestOutputPortFence() CreatePrivateFence...Node: bd2a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.eisv23_cam2, fence: b4e73820(26), ImgBuf:0x0 reqId:608 result: 0行 147: 01-01 12:53:05.451852  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: bd2a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.eisv23_cam2, fence: b4e77020(37), Port: 1, portIndex 1 reqId: 608, ImgBuf: 0x0, portidx/groupID 2 result: 0 行 148: 01-01 12:53:05.451858  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9595 SetupRequestOutputPortFence() CreatePrivateFence...Node: bd2a0000, Node::MultiCameraCustomSATEIS0_com.arcsoft.node.eisv23_cam2, fence: b4e7a820(38), ImgBuf:0x0 reqId:608 result: 0行 149: 01-01 12:53:05.451875  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: 21436000, Node::MultiCameraCustomSATEIS0_EVA10_cam2, fence: b5d87c20(39), Port: 1, portIndex 0 reqId: 608, ImgBuf: 0x0, portidx/groupID 2 result: 0 行 150: 01-01 12:53:05.451885  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: 21436000, Node::MultiCameraCustomSATEIS0_EVA10_cam2, fence: b5d89420(39), Port: 2, portIndex 1 reqId: 608, ImgBuf: 0x0, portidx/groupID 2 result: 0 行 152: 01-01 12:53:05.451902  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence... Node: 2140d000, Node::MultiCameraCustomSATEIS0_IPE10_cam2, fence: b4e80b20(43), Port: 8, portIndex 0 reqId: 608, ImgBuf: 0x0, portidx/groupID 1 result: 0 行 154: 01-01 12:53:05.451920  1825  3581 I CamX    : [ INFO][CORE   ] camxnode.cpp:9466 SetupRequestOutputPortFence() CreatePrivateFence
  1. 我們繼續看下crash的代碼,發現是高通原生代碼,這里也一般不會出現錯誤。
8004  CmdBuffer* Node::GetCmdBufferForRequest(
8005      UINT64              requestId,
8006      CmdBufferManager*   pCmdBufferManager)
8007  {
8008      CAMX_ASSERT(NULL != pCmdBufferManager);
8009  
8010      PacketResource* pPacketResource = NULL;
8011  
8012      if (CamxResultSuccess == pCmdBufferManager->GetBufferForRequest(GetCSLSyncId(requestId), &pPacketResource))
8013      {
8014          CAMX_ASSERT(TRUE == pPacketResource->GetUsageFlags().cmdBuffer);
8015      }
8016  
8017      // We know pPacketResource actually points to a CmdBuffer so we may static_cast
8018      return static_cast<CmdBuffer*>(pPacketResource);
8019  }
  1. 用戶態沒有明顯報錯,我們看下kernel KMD日志,發現高通camx IOVA內存不足導致的分配不到足夠內存導致ISP request一直處于wait,KMD CRM一直not ready on link,最終用戶態也wait。
<6>[ 6646.900716][T503585] CAM_ERR: CAM-SMMU: cam_smmu_map_buffer_validate: 2169 IOVA alloc failed for shared memory, size=10620928, idx=2, handle=162019
<6>[ 6646.900733][T503585] CAM_ERR: CAM-SMMU: cam_smmu_map_buffer_and_add_to_list: 2310 buffer validation failure
<6>[ 6646.900735][T503585] CAM_ERR: CAM-SMMU: cam_smmu_map_user_iova: 3311 mapping or add list fail cb:icp idx=2, fd=803, region=1, rc=-12
<6>[ 6646.900737][T503585] CAM_ERR: CAM-SMMU: cam_smmu_dump_cb_info: 610 ********** 4:53:5:639 Context bank dump for icp **********
<6>[ 6646.900739][T503585] CAM_ERR: CAM-SMMU: cam_smmu_dump_cb_info: 616 Usage: shared_usage=254640128 io_usage=705449984 shared_free=9601024 io_free=3290673152
<6>[ 6646.900742][T503585] CAM_ERR: CAM-MEM: cam_mem_util_map_hw_va: 880 Failed secured map to smmu, i=0, fd=803, dir=0, mmu_hdl=162019, rc=-12
<6>[ 6646.900744][T503585] CAM_ERR: CAM-MEM: cam_mem_mgr_alloc_and_map: 987 Failed in map_hw_va len=10620928, flags=0x859, fd=803, region=1, num_hdl=1, rc=-12
<6>[ 6646.911541][    C2] CAM_INFO: CAM-ISP: __cam_isp_ctx_check_deferred_buf_done: 2203 Buf done with no active request but with req in wait list, req 615 last apply id:615 last err id:0
<6>[ 6646.935116][T221544] CAM_INFO: CAM-CRM: __cam_req_mgr_find_dev_name: 245 Skip Frame: req: 617 not ready on link: 0x490126 for pd: 2 dev: cam-sensor open_req count: 3
  1. 經過分析高通 IOVA內存在kernel dts就固定了size,我們調整大小,復測pass。
			dma-coherent;icp_iova_mem_map: iova-mem-map {iova-mem-region-shared {/* Shared region is ~350MB long */iova-region-name = "shared";iova-region-start = <0x800000>;iova-region-len = <0x16000000>;  //長度增加即可。iova-region-id = <0x1>;status = "ok";

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

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

相關文章

AI知識補全(十五):AI可解釋性與透明度是什么?

名人說&#xff1a;一笑出門去&#xff0c;千里落花風。——辛棄疾《水調歌頭我飲不須勸》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知識補全&#xff08;十四&#xff09;&#xff1a;零樣本…

CentOS 7安裝hyperscan

0x00 前言 HyperScan是一款由Intel開發的高性能正則表達式匹配庫&#xff0c;專為需要快速處理大量數據流的應用場景而設計。它支持多平臺運行&#xff0c;包括Linux、Windows和macOS等操作系統&#xff0c;并針對x86架構進行了優化&#xff0c;以提供卓越的性能表現。HyperSc…

機器學習的一百個概念(9)學習曲線

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

macvlan 和 ipvlan 實現原理及設計案例詳解

一、macvlan 實現原理 1. 核心概念 macvlan 允許在單個物理網絡接口上創建多個虛擬網絡接口&#xff0c;每個虛擬接口擁有 獨立的 MAC 地址 和 IP 地址。工作模式&#xff1a; bridge 模式&#xff08;默認&#xff09;&#xff1a;虛擬接口之間可直接通信&#xff0c;類似交…

linux文件上傳下載lrzsz

lrzsz 是一個在 Linux 系統中用于通過串行端口(如 ZMODEM、XMODEM、YMODEM 等協議)進行文件上傳和下載的工具集。它通常用于在終端環境中通過串口或 SSH 連接傳輸文件。 安裝 lrzsz 在大多數 Linux 發行版中,你可以使用包管理器來安裝 lrzsz。 Debian/Ubuntu: sudo apt-ge…

單片機學習之SPI

物理層 串行全雙工總線 需要四根線&#xff1a;SCLK&#xff08;時鐘線&#xff09;&#xff0c;CS&#xff08;片選線&#xff09;、MOSI(主設備輸出、從設備輸入)&#xff0c;MISO&#xff08;主設備輸入&#xff0c;從設備輸出&#xff09;。 片選信號 片選信號CS是用來…

大模型應用初學指南

隨著人工智能技術的快速發展&#xff0c;檢索增強生成&#xff08;RAG&#xff09;作為一種結合檢索與生成的創新技術&#xff0c;正在重新定義信息檢索的方式&#xff0c;RAG 的核心原理及其在實際應用中的挑戰與解決方案&#xff0c;通用大模型在知識局限性、幻覺問題和數據安…

docker-compose部署prometheus+grafana+node_exporter+alertmanager規則+郵件告警

目錄 一.docker-compose文件 二.配置文件 三.文件層級關系&#xff0c;docker-compose和配置文件位于同級目錄 四.node_exporter頁面json文件 五.效果展示 prometheusalertmanager郵件告警 grafana面板效果 六.涉及離線包 一.docker-compose文件 [rootsulibao prometh…

AI設計再現新引擎,科技創新又添新動能——廣東省首家行業AI設計工程中心獲批成立

近期&#xff0c;大捷智能科技&#xff08;廣東&#xff09;有限公司&#xff08;以下簡稱“大捷智能”&#xff09;憑借其在人工智能與智能制造領域的突出研發實力與創新科技成果&#xff0c;由廣東省科技廳批準設立“廣東省模具智能設計與智能制造工程技術研究中心”。 廣東省…

【MongoDB + 向量搜索引擎】MongoDB Atlas 向量搜索 提供全托管解決方案

在代碼審計項目中&#xff0c;MongoDB可以用于存儲元數據和部分結構化信息&#xff0c;但要高效處理向量相似性搜索&#xff0c;需結合其他工具。以下是具體分析&#xff1a; 1. MongoDB 的適用場景 元數據存儲&#xff1a; 存儲代碼片段的文件路徑、行號、語言類型等結構化信…

基于ANSYS 概率設計和APDL編程的結構可靠性設計分析

01 可靠度基本理論 結構的極限狀態&#xff1a;整個結構的一部分超過某一特定狀態就不能滿足設計規定的某一功能要求。結構的極限狀態實質上是結構工作狀態的一個閥值&#xff0c;如果工作狀態超過這一閥值&#xff0c;則結構處于不安全、不耐久或不適用的狀態&#xff1b;若工…

CyclicBarrier、Semaphore、CountDownLatch的區別,適用場景

CyclicBarrier、Semaphore 和 CountDownLatch 是 Java 并發包中用于線程協作的工具類&#xff0c;它們雖然都與線程同步相關&#xff0c;但設計目的和使用場景有顯著差異。以下是它們的核心區別和典型應用場景&#xff1a; 1. CountDownLatch 核心機制 一次性計數器&#xf…

新能源汽車測試中的信號調理模塊:從原理到實戰應用

摘要 信號調理模塊&#xff08;Signal Conditioning Module, SCM&#xff09;是新能源汽車&#xff08;NEV&#xff09;測試系統中的關鍵環節&#xff0c;直接影響數據采集的精度與可靠性。本文面向HIL測試工程師、電機測試工程師及整車動力經濟性測試工程師&#xff0c;系統性…

Qt5 Mac系統檢查休眠

在開發跨平臺應用程序時,有時候我們需要檢測系統的狀態,比如是否處于休眠或喚醒狀態。Qt是一個強大的跨平臺應用開發框架,支持多種操作系統,包括Windows、Linux、macOS等。在這個場景下,我們關注的是如何在Qt5.10中檢測到系統是否休眠以及在Mac上實現這一功能。本文將深入…

RabbitMQ簡單介紹和安裝

RabbitMQ簡單介紹 一.RabbitMQ介紹二.RabbitMQ的作用1.異步解耦2.流量削峰3.消息分發4.延遲通知 三.RabbitMQ安裝&#xff08;Ubuntu&#xff09;1.先安裝Erlang2.安裝RabbitMQ3.安裝RabbitMQ的管理界面4.創建虛擬機5.端口號信息 四.工作原理圖 一.RabbitMQ介紹 RabbitMQ 是一款…

匯編學習之《call, return指令》

call 指令 call 指令就是調用函數的執行&#xff0c;不過它也是幾個指令的組合 第一步通過jmp 函數地址的方式先跳轉到函數 第二步通過push 指令將函數地址指令額下一行的指令的地址壓入棧中。 我們來驗證下 首先打開OllyDbg,導入你的程序&#xff0c;找到一個call 函數&…

接口自動化學習三:參數化parameterize

使用parametrize之前&#xff1a; def add(x,y):return xy class TestAddFunction(object):def test01(self):resadd(2,4)assert 6resdef test02(self):resadd(4,6)assert 10resparametrize參數化之后&#xff1a; import pytest def add(x,y):return xydata[(10,20,30),(200…

全面解析 Mybatis 與 Mybatis-Plus:深入原理、實踐案例與高級特性對比

全面解析 Mybatis 與 Mybatis-Plus&#xff1a;深入原理、實踐案例與高級特性對比 &#x1f680; 前言一、基礎介紹 ?1. Mybatis 簡介 &#x1f50d;2. Mybatis-Plus 簡介 ? 二、核心區別與高級特性對比 &#x1f50e;1. 開發模式與配置管理2. 功能豐富度與擴展性3. 自動填充…

【區塊鏈安全 | 第十九篇】類型之映射類型

文章目錄 映射類型可迭代映射 映射類型 映射類型使用語法 mapping(KeyType KeyName? > ValueType ValueName?)&#xff0c;映射類型的變量聲明使用語法 mapping(KeyType KeyName? > ValueType ValueName?) VariableName。 KeyType 可以是任何內置值類型、bytes、st…

動態循環表單+動態判斷表單類型+動態判斷表單是否必填方法

頁面效果&#xff1a; 接口請求到的數據格式&#xff1a; list: [{demandType: "設備輔助功能要求",demandSettingList: [{id: "1907384788664963074",name: "測試表單",fieldType: 0,contentValue: "",vaildStatus: 0, // 0 非必填&a…