【Android 系统中使用CallStack类来追踪获取和操作调用栈信息】

Android系统CallStack类的使用

    • 定义
    • 使用方法
    • 使用场景
    • 注意事项
    • 应用举例

定义

在 Android 系统中,CallStack 类是一个用于获取和操作调用栈信息的工具类。这个类通常用于调试和日志记录,以帮助开发者了解函数调用的顺序和位置。以下是您提供的代码片段的解释和使用场景:

使用方法

  1. 在调试的文件中添加头文件
#include <utils/CallStack.h>
  1. 在构建脚本中添加库:libutilscallstack
    在Android.bp或者Android.mk文件中把libutilscallstack库文件包进去。
  • 对于 Android.bp
    cc_library {
        name: "libmylibrary",
        srcs: ["my_file.cpp"],
        static_libs: ["libutilscallstack"],
    }
    
  • 对于 Android.mk
    LOCAL_STATIC_LIBRARIES += libutilscallstack
    
  1. 创建 CallStack 实例
    android::CallStack cs("String");
    
    这行代码创建了一个 CallStack 对象 cs,并初始化它。"String" 是一个标签,用于标识这个调用栈的用途或来源。这个标签可以是任何字符串,有助于在日志或调试输出中识别特定的调用栈实例。

使用场景

CallStack 类通常用于以下场景:

  • 异常处理:在捕获异常时,使用 CallStack 来记录导致异常的函数调用序列。
  • 性能分析:在性能关键的部分,使用 CallStack 来追踪函数调用,以便了解哪些函数是性能瓶颈。
  • 日志记录:在日志消息中包含调用栈信息,以帮助开发者或技术支持人员了解日志消息的来源。
  • 调试辅助:在调试过程中,使用 CallStack 来验证函数调用的顺序和层次结构。

注意事项

  • CallStack 类的具体实现和功能可能会根据不同的 Android 版本和平台有所不同。
  • 使用 CallStack 可能会引入一定的性能开销,因为它需要捕获和存储调用栈信息。因此,在性能敏感的应用中,应谨慎使用。
  • 确保在您的项目中正确包含了 CallStack 所需的头文件和库文件,否则您的代码可能会编译失败。

应用举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打印没有

10-25 10:15:56.707  2531  3090 D Vaccine : #00 pc 000000000001e684  /vendor/lib64/libcam.hal3a.v3.so (NS3Av3::Hal3AAdapter3::parseMeta(std::__1::vector<NS3Av3::MetaSet_T*, std::__1::allocator<NS3Av3::MetaSet_T*> > const&, char const*)+172)
10-25 10:15:56.707  2531  3090 D Vaccine : #01 pc 000000000001b764  /vendor/lib64/libcam.hal3a.v3.so (NS3Av3::Hal3AAdapter3::setNormal(std::__1::vector<NS3Av3::MetaSet_T*, std::__1::allocator<NS3Av3::MetaSet_T*> > const&)+1960)
10-25 10:15:56.707  2531  3090 D Vaccine : #02 pc 000000000001e3dc  /vendor/lib64/libcam.hal3a.v3.so (NS3Av3::Hal3AAdapter3::set(std::__1::vector<NS3Av3::MetaSet_T*, std::__1::allocator<NS3Av3::MetaSet_T*> > const&)+8)
10-25 10:15:56.707  2531  3090 D Vaccine : #03 pc 000000000001e284  /vendor/lib64/libcam.hal3a.v3.so (NS3Av3::Hal3AAdapter3::startRequestQ(std::__1::vector<NS3Av3::MetaSet_T*, std::__1::allocator<NS3Av3::MetaSet_T*> > const&)+2084)
10-25 10:15:56.707  2531  3090 D Vaccine : #04 pc 00000000000dea24  /vendor/lib64/libmtkcam_hwnode.so (NSCam::v3::NSP1Node::P1NodeImp::hardwareOps_request()+2812)
10-25 10:15:56.707  2531  3090 D Vaccine : #05 pc 00000000000c8794  /vendor/lib64/libmtkcam_hwnode.so (NSCam::v3::NSP1Node::P1NodeImp::runQueue(android::sp<NSCam::v3::IPipelineFrame> const&)+9912)
10-25 10:15:56.707  2531  3090 D Vaccine : #06 pc 00000000000d69d4  /vendor/lib64/libmtkcam_hwnode.so (NSCam::v3::NSP1Node::P1NodeImp::queue(android::sp<NSCam::v3::IPipelineFrame>)+444)
10-25 10:15:56.707  2531  3090 D Vaccine : #07 pc 0000000000072a78  /vendor/lib64/libmtkcam_pipeline.so (NSCam::v3::pipeline::NSPipelineContext::PipelineContext::PipelineContextImpl::sendFrameToRootNodes(android::sp<NSCam::v3::IPipelineFrame> const&, android::Vector<android::sp<NSCam::v3::IPipelineNode> >&)+428)
10-25 10:15:56.707  2531  3090 D Vaccine : #08 pc 0000000000072154  /vendor/lib64/libmtkcam_pipeline.so (NSCam::v3::pipeline::NSPipelineContext::PipelineContext::PipelineContextImpl::sendFrame(android::sp<NSCam::v3::IPipelineFrame> const&)+1628)
10-25 10:15:56.707  2531  3090 D Vaccine : #09 pc 0000000000071ac8  /vendor/lib64/libmtkcam_pipeline.so (NSCam::v3::pipeline::NSPipelineContext::PipelineContext::PipelineContextImpl::submitOneFrame(android::sp<NSCam::v3::IPipelineFrame> const&)+392)
10-25 10:15:56.707  2531  3090 D Vaccine : #10 pc 0000000000071794  /vendor/lib64/libmtkcam_pipeline.so (NSCam::v3::pipeline::NSPipelineContext::PipelineContext::PipelineContextImpl::submitFrame(std::__1::vector<android::sp<NSCam::v3::IPipelineFrame>, std::__1::allocator<android::sp<NSCam::v3::IPipelineFrame> > > const&)+116)
10-25 10:15:56.707  2531  3090 D Vaccine : #11 pc 000000000003d7a0  /vendor/lib64/libmtkcam_pipelinemodel_session.so (NSCam::v3::pipeline::model::PipelineModelSessionDefault::onProcessEvaluatedFrame(unsigned int&, unsigned int&, NSCam::v3::pipeline::model::PipelineModelSessionBasic::ProcessEvaluatedFrame const&)+3584)
10-25 10:15:56.708  2531  3090 D Vaccine : #12 pc 0000000000038f38  /vendor/lib64/libmtkcam_pipelinemodel_session.so (NSCam::v3::pipeline::model::PipelineModelSessionBasic::processEvaluatedFrame(NSCam::v3::pipeline::model::PipelineModelSessionBasic::ProcessEvaluatedFrame const&)+616)
10-25 10:15:56.708  2531  3090 D Vaccine : #13 pc 0000000000047438  /vendor/lib64/libmtkcam_pipelinemodel_session.so (NSCam::v3::pipeline::model::PipelineModelSession4Cell::submitOneRequest(std::__1::shared_ptr<NSCam::v3::pipeline::model::ParsedAppRequest> const&)+3224)
10-25 10:15:56.708  2531  3090 D Vaccine : #14 pc 0000000000032090  /vendor/lib64/libmtkcam_pipelinemodel_session.so (NSCam::v3::pipeline::model::PipelineModelSessionBase::submitRequest(std::__1::vector<std::__1::shared_ptr<NSCam::v3::pipeline::model::UserRequestParams>, std::__1::allocator<std::__1::shared_ptr<NSCam::v3::pipeline::model::UserRequestParams> > > const&, unsigned int&)+1072)
10-25 10:15:56.708  2531  3090 D Vaccine : #15 pc 000000000000e468  /vendor/lib64/libmtkcam_pipelinemodel.so (NSCam::v3::pipeline::model::PipelineModelImpl::submitRequest(std::__1::vector<std::__1::shared_ptr<NSCam::v3::pipeline::model::UserRequestParams>, std::__1::allocator<std::__1::shared_ptr<NSCam::v3::pipeline::model::UserRequestParams> > > const&, unsigned int&)+212)
10-25 10:15:56.708  2531  3090 D Vaccine : #16 pc 0000000000025f00  /vendor/lib64/libmtkcam_device3_hal.so (NSCam::v3::CameraDevice3SessionImpl::onProcessCaptureRequest(std::__1::vector<NSCam::v3::CaptureRequest, std::__1::allocator<NSCam::v3::CaptureRequest> > const&, unsigned int&)+5668)
10-25 10:15:56.708  2531  3090 D Vaccine : #17 pc 000000000002c124  /vendor/lib64/libmtkcam_device3_hal.so (NSCam::v3::CameraDevice3SessionImpl::processCaptureRequest(std::__1::vector<NSCam::v3::CaptureRequest, std::__1::allocator<NSCam::v3::CaptureRequest> > const&, unsigned int&)+260)
10-25 10:15:56.708  2531  3090 D Vaccine : #18 pc 000000000001af98  /vendor/lib64/libmtkcam_device3_hidl.so (NSCam::hidl_dev3::HidlCameraDeviceSession::processCaptureRequest_3_4(android::hardware::hidl_vec<android::hardware::camera::device::V3_4::CaptureRequest> const&, android::hardware::hidl_vec<android::hardware::camera::device::V3_2::BufferCache> const&, std::__1::function<void (android::hardware::camera::common::V1_0::Status, unsigned int)>)+692)
10-25 10:15:56.708  2531  3090 D Vaccine : #19 pc 000000000001b524  /apex/com.android.vndk.v30/lib64/android.hardware.camera.device@3.4.so (android::hardware::camera::device::V3_4::BnHwCameraDeviceSession::_hidl_processCaptureRequest_3_4(android::hidl::base::V1_0::BnHwBase*, android::hardware::Parcel const&, android::hardware::Parcel*, std::__1::function<void (android::hardware::Parcel&)>)+564)
10-25 10:15:56.708  2531  3090 D Vaccine : #20 pc 00000000000265b8  /apex/com.android.vndk.v30/lib64/android.hardware.camera.device@3.6.so (android::hardware::camera::device::V3_6::BnHwCameraDeviceSession::onTransact(unsigned int, android::hardware::Parcel const&, android::hardware::Parcel*, unsigned int, std::__1::function<void (android::hardware::Parcel&)>)+1176)
10-25 10:15:56.708  2531  3090 D Vaccine : #21 pc 0000000000082700  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::BHwBinder::transact(unsigned int, android::hardware::Parcel const&, android::hardware::Parcel*, unsigned int, std::__1::function<void (android::hardware::Parcel&)>)+72)
10-25 10:15:56.708  2531  3090 D Vaccine : #22 pc 0000000000086678  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::IPCThreadState::getAndExecuteCommand()+1076)
10-25 10:15:56.708  2531  3090 D Vaccine : #23 pc 00000000000878e4  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::IPCThreadState::joinThreadPool(bool)+96)
10-25 10:15:56.708  2531  3090 D Vaccine : #24 pc 0000000000096b88  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::PoolThread::threadLoop()+24)
10-25 10:15:56.708  2531  3090 D Vaccine : #25 pc 0000000000015334  /apex/com.android.vndk.v30/lib64/libutils.so (android::Thread::_threadLoop(void*)+260)
10-25 10:15:56.708  2531  3090 D Vaccine : #26 pc 0000000000014bf8  /apex/com.android.vndk.v30/lib64/libutils.so (thread_data_t::trampoline(thread_data_t const*)+412)
10-25 10:15:56.708  2531  3090 D Vaccine : #27 pc 00000000000ecacc  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
10-25 10:15:56.708  2531  3090 D Vaccine : #28 pc 000000000008d340  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
10-25 10:15:56.708  2531  3090 D Hal3Av3 : ontim entry.tag is bad tag!
10-25 10:15:56.708 30039 30590 D InsetsAnimationCtrlImpl: Animation finished abruptly.
10-25 10:15:56.708  2531  3090 D Hal3Av3 : ontim entry  isEmpty!
10-25 10:15:56.708  2531  3090 D Hal3Av3 : [parseMeta] Set Manual Pline Index back to 0
10-25 10:15:56.708  2531  3090 D Hal3Av3 : [parseMeta] Set Custom Pline Mode back to 0

整理调用关系如下

@startuml
vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/common/hal3a/v3.0/Hal3AAdapter3.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p1/P1NodeImp.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/pipeline/PipelineContextImpl.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/pipeline/PipelineContext.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/model/session/PipelineModelSessionDefault.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/model/session/PipelineModelSessionBasic.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/model/session/PipelineModelSession4Cell.cpp
vendor/mediatek/proprietary/hardware/mtkcam/middleware/v3/pipeline/adapter/PipelineModelManagerImpl.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/model/session/PipelineModelSessionBase.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/model/PipelineModelImpl.cpp
vendor/mediatek/proprietary/hardware/mtkcam/main/hal/device/3.x/device/CameraDevice3SessionImpl.cpp
vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/entry/hidl/device/3.x/HidlCameraDeviceSession.cpp

10-25 10:15:56.708  2531  3090 D Vaccine : #19 pc 000000000001b524  /apex/com.android.vndk.v30/lib64/android.hardware.camera.device@3.4.so (android::hardware::camera::device::V3_4::BnHwCameraDeviceSession::_hidl_processCaptureRequest_3_4(android::hidl::base::V1_0::BnHwBase*, android::hardware::Parcel const&, android::hardware::Parcel*, std::__1::function<void (android::hardware::Parcel&)>)+564)
10-25 10:15:56.708  2531  3090 D Vaccine : #20 pc 00000000000265b8  /apex/com.android.vndk.v30/lib64/android.hardware.camera.device@3.6.so (android::hardware::camera::device::V3_6::BnHwCameraDeviceSession::onTransact(unsigned int, android::hardware::Parcel const&, android::hardware::Parcel*, unsigned int, std::__1::function<void (android::hardware::Parcel&)>)+1176)
10-25 10:15:56.708  2531  3090 D Vaccine : #21 pc 0000000000082700  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::BHwBinder::transact(unsigned int, android::hardware::Parcel const&, android::hardware::Parcel*, unsigned int, std::__1::function<void (android::hardware::Parcel&)>)+72)
10-25 10:15:56.708  2531  3090 D Vaccine : #22 pc 0000000000086678  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::IPCThreadState::getAndExecuteCommand()+1076)
10-25 10:15:56.708  2531  3090 D Vaccine : #23 pc 00000000000878e4  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::IPCThreadState::joinThreadPool(bool)+96)
10-25 10:15:56.708  2531  3090 D Vaccine : #24 pc 0000000000096b88  /apex/com.android.vndk.v30/lib64/libhidlbase.so (android::hardware::PoolThread::threadLoop()+24)
10-25 10:15:56.708  2531  3090 D Vaccine : #25 pc 0000000000015334  /apex/com.android.vndk.v30/lib64/libutils.so (android::Thread::_threadLoop(void*)+260)
10-25 10:15:56.708  2531  3090 D Vaccine : #26 pc 0000000000014bf8  /apex/com.android.vndk.v30/lib64/libutils.so (thread_data_t::trampoline(thread_data_t const*)+412)
10-25 10:15:56.708  2531  3090 D Vaccine : #27 pc 00000000000ecacc  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
10-25 10:15:56.708  2531  3090 D Vaccine : #28 pc 000000000008d340  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

HidlCameraDeviceSession.cpp --> CameraDevice3SessionImpl.cpp: static_cast<status_t>(mSession->processCaptureRequest(captureRequests, numRequestProcessed));
CameraDevice3SessionImpl.cpp --> CameraDevice3SessionImpl.cpp: onProcessCaptureRequest(v34Requests, cachesToRemove, numRequestProcessed);
CameraDevice3SessionImpl.cpp --> PipelineModelImpl.cpp: pPipelineModel->submitRequest(vPipelineRequests, numRequestProcessed);
PipelineModelImpl.cpp --> PipelineModelSessionBase.cpp: session->submitRequest(requests, numRequestProcessed);
PipelineModelSessionBase.cpp --> PipelineModelSession4Cell.cpp: submitOneRequest(reqs[i]);
PipelineModelSession4Cell.cpp --> PipelineModelSessionBasic.cpp: processEvaluatedFrame()
PipelineModelSessionBasic.cpp --> PipelineModelSessionDefault.cpp: onProcessEvaluatedFrame(lastFrameNo, lastZslFrameNo, in);
PipelineModelSessionDefault.cpp --> PipelineContext.cpp: in.pPipelineContext->queue(pplFrames)
PipelineContext.cpp --> P1NodeImp.cpp: getImpl()->submitFrame(frames);
P1NodeImp.cpp --> P1NodeImp.cpp: submitOneFrame(f);
P1NodeImp.cpp --> P1NodeImp.cpp: return sendFrame(pFrame);//PipelineContext::PipelineContextImpl::sendFrame();
P1NodeImp.cpp --> P1NodeImp.cpp: sendFrameToRootNodes(pFrame, vspPipelineNode)
P1NodeImp.cpp --> P1NodeImp.cpp: (*it)->queue(pFrame);
P1NodeImp.cpp --> P1NodeImp.cpp: runQueue(pFrame);
P1NodeImp.cpp --> P1NodeImp.cpp: hardwareOps_request();
P1NodeImp.cpp --> Hal3AAdapter3.cpp: mp3A->startRequestQ(ctrlQueue);
Hal3AAdapter3.cpp --> Hal3AAdapter3.cpp: Hal3AAdapter3::startRequestQ(const std::vector<MetaSet_T*>& requestQ)
Hal3AAdapter3.cpp --> Hal3AAdapter3.cpp: Hal3AAdapter3::set(const vector<MetaSet_T*>& requestQ)
Hal3AAdapter3.cpp --> Hal3AAdapter3.cpp: Hal3AAdapter3::setNormal(const vector<MetaSet_T*>& requestQ)
Hal3AAdapter3.cpp --> Hal3AAdapter3.cpp: parseMeta(requestQ, __FUNCTION__);\n case MTK_CONTROL_AF_MODE:
@enduml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IBM服务器修改IMM的IP方法

服务器设备&#xff1a;IBM x3550 M4 Server IMM默认IP地址&#xff1a;192.168.70.125 用户名&#xff1a;USERID 密码&#xff1a;PASSW0RD&#xff08;注意是零0&#xff09; 1.服务器开机按F1进入BIOS界面 2.进入System Settings 3.进入Integrated Management Module 4.…

【数据分享】1901-2023年我国省市县镇四级的逐年最高气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最高气温栅格数据和Excel和Shp格式的省市县镇四级逐月最高气温数据&#xff0c;原始的逐月最高气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月数据我们采用求年平均值的方法得到逐年最高…

【前端】Vue3实现图片标点

前言 公司的业务要求可以在图片的位置上面进行标点&#xff0c;然后在现场对汽车桌椅可以实现按照标点进行质量检测。 技术栈 Vue3&#xff1a;https://cn.vuejs.org/index.htmlAnt Design Vue4.x&#xff1a;https://www.antdv.com/docs/vue/introduce-cn 图像标点 将画布…

FP7209M太阳能升压恒流一体测试板,带短路保护功能,软启动时间可调,应用于太阳能吸塑灯箱 商场便利店户外门头侧挂招牌广告牌led灯箱

太阳能灯箱用于城市主要街道、停车场、宾馆、旅游区、等夜间人群活动较多的公共场所照明的设备 太阳能广告灯箱凭借独特的设计理念为广告行业开辟一个全新的领域。不仅具有广告原有的宣传作用&#xff0c;还点亮了都市&#xff0c;小区的景观环境。在不需要架电线&#xff0c;电…

JS渗透(安全)

JS逆向 基本了解 作用域&#xff1a; 相关数据值 调用堆栈&#xff1a; 由下到上就是代码的执行顺序 常见分析调试流程&#xff1a; 1、代码全局搜索 2、文件流程断点 3、代码标签断点 4、XHR提交断点 某通js逆向结合burp插件jsEncrypter 申通快递会员中心-登录 查看登录包…

Imperva 数据库与安全解决方案

Imperva是网络安全解决方案的专业提供商&#xff0c;能够在云端和本地对业务关键数据和应用程序提供保护。公司成立于 2002 年&#xff0c;拥有稳定的发展和成功历史并于 2014 年实现产值1.64亿美元&#xff0c;公司的3700多位客户及300个合作伙伴分布于全球各地的90多个国家。…

工业网络监控中的IP保护与软件授权革新

未来的智能工厂离不开稳定而高效的通信网络&#xff0c;这些网络在支撑生产流程的同时&#xff0c;也面临着复杂的管理与安全挑战。PROCENTEC推出了一系列硬件和软件产品&#xff0c;如Atlas、Mercury和Osiris&#xff0c;以提供全面的网络监控和故障排除能力。然而&#xff0c…

基于springboot+vue实现的网上预约挂号管理系统 (源码+L文+ppt)4-104

结合现有六和医院网上预约挂号管理系统的特点&#xff0c;应用新技术&#xff0c;构建了六和医院网上预约挂号管理系统。首先从需求出发&#xff0c;对目前传统的六和医院网上预约挂号管理进行了详细的了解和分析。根据需求分析结果&#xff0c;对系统进行了设计&#xff0c;并…

QT for android 问题总结(QT 5.15.2)

1.配置好的sdk&#xff0c;显示设置失败 Android SDK Command-line Tools run. Android Platform-Tools installed. Command-line Tools (latest) 版本过高导致报错 &#xff0c;下载一个低版本的latest &#xff0c;替换掉之前latest中的文件。即可&#xff0c;latest 路径如…

NAS端最强音乐库,多平台服务支持。海康存储部署『Navidrome』

NAS端最强音乐库&#xff0c;多平台服务支持。海康存储部署『Navidrome』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 对于我们NAS用户&#xff0c;我们总是喜欢将自己喜欢的音乐资源通过下载的方式保存在本地&#xff0c;不过海康存储目前对因音乐的支持和管理实在过于薄弱&am…

【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields

1.论文介绍 Wavelet Convolutions for Large Receptive Fields 大感受野的小波卷积 2024 EECV Paper Code 2.摘要 近年来&#xff0c;人们试图通过增加卷积神经网络&#xff08;ConvolutionalNeuralNets&#xff0c;CNNs&#xff09;的核尺寸来模拟视觉变换器&#xff08;V…

2024年最新10款顶级项目管理软件排行

项目管理软件在现代项目管理中扮演着至关重要的角色&#xff0c;它不仅仅是一个工具&#xff0c;更是一种高效、系统化的方法来管理和优化项目流程&#xff0c;帮助项目经理和团队成员快速了解项目状态&#xff0c;加速项目进展。 进度猫 进度猫是一款以甘特图为向导的轻量级…

SAP ABAP开发学习——RFC

目录 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接口系统 RFC的通信模式 RFC版本 RFC调用方式 Web Service接口 SAP创建Web Service示例 远程目标的维护 创建远程目标 外部系统访问设置 RFC的调用 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接…

gps数据对接G7易流平台

之前伙伴对接G7物流平台获取温度、轨迹数据&#xff0c;写的一塌糊涂&#xff0c;今天来重新对接下。 G7易流 G7物联和易流科技合并后正式发布的品牌&#xff0c;主要面向生产制造与消费物流行业的货主及货运经营者提供软硬一体、全链贯通的SaaS服务。这包括订阅服务&#xff…

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手&#xff0c;下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

高效新闻管理:SpringBoot框架应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理新闻稿件管理系统的相关信息成为必然。开发…

【已解决】C# NPOI如何设置单元格格式

前言 设置单元格格式我们做表格必须要的一步&#xff0c;那么如何对单元格进行设置呢&#xff1f;直接上图看看效果图先&#xff0c;我做的是一个居中然后字体变化的操作&#xff0c;其他的查他的手册即可。 解决方法 直接上代码 IWorkbook excelDoc new XSSFWorkbook();…

通过微调 Embedding 优化 RAG

大型语言模型 (LLM) 向用户和组织展示了巨大的潜力&#xff1b;它们的强大功能和生成能力使它们最近广受欢迎并被广泛接受。LLM 面临的一些缺点是无法以上下文感知的方式生成或响应用户给出的提示&#xff0c;听起来非常通用和开放&#xff0c;或者有时响应的信息已经过时。如果…

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求&#xff1a;根据 form 表单填写内容生成二维码&#xff08;第一版&#xff1a;表单目前需要客户进行自己输入&#xff0c;然后点击生成按钮实时生成二维码&#xff0c;不需要向后端请求&#xff0c;不存如数据库&#xf…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(二)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…