(1)发生Error的backtrace

我们就以经常出现NE为例,来说明这个情况,一般出现NE之后,main Log会有如下信息:

03-03 11:34:35.971851 10105 10105 I AEE_AED : pid: 690, tid: 10062, >>> /vendor/bin/hw/camerahalserver <<<
03-03 11:34:35.971953 10105 10105 I AEE_AED : read_request: receive requirement from aee_core_forwar
03-03 11:34:35.972122  9919  9919 V ViewRootImpl[CameraLauncher]: enqueueInputEvent: event = MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=163.77254, y[0]=491.15894, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=569.2095, y[1]=887.506, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=2, eventTime=355096, downTime=351966, deviceId=3, source=0x1002, displayId=0 },processImmediately = true,mProcessInputEventsScheduled = false, this = android.view.ViewRootImpl@22ca12b
03-03 11:34:35.972240 10105 10105 D AEE_AED : u:r:mtk_hal_camera:s0
03-03 11:34:35.972450 10105 10105 V AEE_AED : dashboard_record_update() : rec->module = /vendor/bin/hw/camerahalserver
03-03 11:34:35.972495 10105 10105 V AEE_AED : Update record[0]
03-03 11:34:35.972518 10105 10105 D AEE_AED :  i, Cls,   count,  last_time,  module
03-03 11:34:35.972539 10105 10105 D AEE_AED : ====================================================================
03-03 11:34:35.972566 10105 10105 D AEE_AED :  0,  3,       1,   1646278475,     /vendor/bin/hw/camerahalserver
03-03 11:34:35.972588 10105 10105 D AEE_AED :  1, -1,       0,   0,
03-03 11:34:35.972611 10105 10105 D AEE_AED :  2, -1,       0,   0,
03-03 11:34:35.972633 10105 10105 D AEE_AED :  3, -1,       0,   0,
03-03 11:34:35.972654 10105 10105 D AEE_AED :  4, -1,       0,   0,
03-03 11:34:35.972676 10105 10105 D AEE_AED :  5, -1,       0,   0,
03-03 11:34:35.972697 10105 10105 D AEE_AED :  6, -1,       0,   0,
03-03 11:34:35.972719 10105 10105 D AEE_AED :  7, -1,       0,   0,
03-03 11:34:35.972761 10105 10105 W AEE_AED : DAL feature is off, just return
03-03 11:34:35.972759  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.972825 10105 10105 I AEE_AED : Dumping EXP/Native (NE)
03-03 11:34:35.972874  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.972968 10105 10105 I AEE_AED : aed_wait_decrypt done! file base encryption
03-03 11:34:35.972976  9919  9919 D CamAp_Zoom-0: [calculateDistanceRatio] distanceRatio = 0.974541187286377
03-03 11:34:35.973056 10105 10105 I AEE_AED : db base:/data/aee_exp
03-03 11:34:35.973058  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.973792  9727  9793 I DebugLoggerUI/FileMonitor: onEvent(). event = 1073742080, path = temp
03-03 11:34:35.973882 10105 10105 D AEE_AED : aed_report_dump_open: Using /data/aee_exp/temp/db.X7S25S
03-03 11:34:35.974393 10105 10105 I AEE_AED : predump starts
03-03 11:34:35.974873 10105 10105 E AEE_AED : Fail to open process map: /proc/690/maps
03-03 11:34:35.975002 10105 10105 E AEE_AED : generate_pagemap_data: Copy from pid:690 failed(13), Permission denied
03-03 11:34:35.975420 10105 10105 E AEE_AED : Fail to open process map: /proc/690/maps
03-03 11:34:35.975531 10105 10105 E AEE_AED : generate_pagemap_data: Copy from pid:690 failed(13), Permission denied
03-03 11:34:35.975564 10105 10105 I AEE_AED : predump ends
03-03 11:34:35.975901 10105 10105 D AEE_AED : aed_ne_core_session: notify core_forwarder to continue
03-03 11:34:35.975971 10105 10105 I AEE_AED : ne_direct_unwind start
03-03 11:34:35.976128 10104 10104 E libc    : Access denied finding property "persist.vendor.aee.log.status"
03-03 11:34:35.976270 10104 10104 I aee_core_forwarder: process_coredump: Got core filename from coredump receiver /data/aee_exp/temp/db.X7S25S/COREDUMP
03-03 11:34:35.988892  9919  9919 V ViewRootImpl[CameraLauncher]: enqueueInputEvent: event = MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=163.77254, y[0]=491.15894, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=569.2095, y[1]=890.3817, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=1, eventTime=355113, downTime=351966, deviceId=3, source=0x1002, displayId=0 },processImmediately = true,mProcessInputEventsScheduled = false, this = android.view.ViewRootImpl@22ca12b
03-03 11:34:35.989547  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.989708  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.989846  9919  9919 D CamAp_Zoom-0: [calculateDistanceRatio] distanceRatio = 0.9820560216903687
03-03 11:34:35.989922  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:35.992925 10105 10105 E AEE_AED :  dump_registers32:write stack ok
03-03 11:34:35.993119 10105 10105 I AEE_AED :  dump_regs:dump regs ok
03-03 11:34:35.993711 10105 10105 I AEE_AED : stack start(9e4e6ec8),end(9e4e8e6b),length(1fa3)
03-03 11:34:35.999261 10105 10105 I AEE_AED :  dump_stack32:dump stack ok
03-03 11:34:36.005201  9919  9919 V ViewRootImpl[CameraLauncher]: enqueueInputEvent: event = MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=163.77254, y[0]=491.15894, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=570.7074, y[1]=890.8813, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=1, eventTime=355125, downTime=351966, deviceId=3, source=0x1002, displayId=0 },processImmediately = true,mProcessInputEventsScheduled = false, this = android.view.ViewRootImpl@22ca12b
03-03 11:34:36.005864  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:36.006074  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:36.006189  9919  9919 D CamAp_Zoom-0: [calculateDistanceRatio] distanceRatio = 0.9873480796813965
03-03 11:34:36.006250  9919  9919 I Config  : wideAngleId:-1isZoomSwitchSupport:false
03-03 11:34:36.039469 10105 10105 I AEE_AED :     #00 pc 00062b20  /apex/com.android.runtime/lib/bionic/libc.so (abort+172) (BuildId: 6a24d276a45a50f2b3001b261bd2c63a)
03-03 11:34:36.039678 10105 10105 I AEE_AED :     #01 pc 00004cf3  /system/lib/liblog.so (__android_log_default_aborter+6) (BuildId: 5dc5d63c2a2976e23b23e8e92482e701)
03-03 11:34:36.039897 10105 10105 I AEE_AED :     #02 pc 00005403  /system/lib/liblog.so (__android_log_assert+174) (BuildId: 5dc5d63c2a2976e23b23e8e92482e701)
03-03 11:34:36.041062 10105 10105 I AEE_AED :     #03 pc 000f0027  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::onDIPStreamBaseCB(NSCam::Feature::P2Util::DIPParams const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+734) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.042051 10105 10105 I AEE_AED :     #04 pc 000f6b83  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::CookieStore<NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData> >::staticProcessCB(NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>::T_Msg const&, NSCam::Feature::P2Util::DIPParams, void*, bool)+174) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.043290 10105 10105 I AEE_AED :     #05 pc 000f6a79  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::CookieStore<NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData> >::enque(NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>*, NSCam::Feature::P2Util::DIPStream*, NSCam::Feature::P2Util::DIPParams, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+400) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.044398 10105 10105 I AEE_AED :     #06 pc 000f0b65  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>::enqueDIPStreamBase(NSCam::Feature::P2Util::DIPStream*, NSCam::Feature::P2Util::DIPParams const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+100) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.045674 10105 10105 I AEE_AED :     #07 pc 000ef22f  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::enqueFeatureStream(NSCam::Feature::P2Util::DIPParams&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData&)+386) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.046881 10105 10105 I AEE_AED :     #08 pc 000edc07  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::runP2HW(android::sp<NSCam::NSCamFeature::NSFeaturePipe::StreamingFeatureRequest> const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData&, std::__1::vector<NSCam::NSCamFeature::NSFeaturePipe::P2G::P2HW, std::__1::allocator<NSCam::NSCamFeature::NSFeaturePipe::P2G::P2HW> > const&, std::__1::vector<NSCam::NSCamFeature::NSFeaturePipe::P2G::PMDP, std::__1::allocator<NSCam::NSCamFeature::NSFeaturePipe::P2G::PMDP> > const&)+326) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.047992 10105 10105 I AEE_AED :     #09 pc 000eb5c7  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::processP2A(android::sp<NSCam::NSCamFeature::NSFeaturePipe::StreamingFeatureRequest> const&, NSCam::NSCamFeature::NSFeaturePipe::RSCResult const&)+642) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.049129 10105 10105 I AEE_AED :     #10 pc 000eb18d  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::onThreadLoop()+736) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)
03-03 11:34:36.049421 10105 10105 I AEE_AED : ne_direct_unwind end
03-03 11:34:36.049822 10105 10105 I AEE_AED : $** *** *** *** *** *** *** *** Exception *** *** *** *** *** *** *** **$
03-03 11:34:36.050323 10105 10105 I AEE_AED : Build Info: 'alps-mp-r0.mp1:alps-mp-r0.mp1-V8.288:mt6739:S01,VISION/VISION_V1/VISION_V1:11/RP1A.200720.011/1645003953:userdebug/release-keys'
03-03 11:34:36.050423 10105 10105 I AEE_AED : MSSI Info: 'VISION/VISION_V1/VISION_V1:11/RP1A.200720.011/1645003953:userdebug/release-keys'
03-03 11:34:36.051617 10105 10105 I AEE_AED : Exception Log Time:[Thu Mar  3 11:34:36 CST 2022] [355.182551]
03-03 11:34:36.051617 10105 10105 I AEE_AED :
03-03 11:34:36.051740 10105 10105 I AEE_AED : Exception Class: Native (NE)
03-03 11:34:36.051772 10105 10105 I AEE_AED : Exception Type: SIGABRT
03-03 11:34:36.051772 10105 10105 I AEE_AED :
03-03 11:34:36.051803 10105 10105 I AEE_AED : Current Executing Process:
03-03 11:34:36.051803 10105 10105 I AEE_AED :   pid: 690, tid: 10062
03-03 11:34:36.051803 10105 10105 I AEE_AED :   /vendor/bin/hw/camerahalserver
03-03 11:34:36.051803 10105 10105 I AEE_AED :
03-03 11:34:36.052707 10105 10105 I AEE_AED : $** *** *** *** *** *** *** *** Exception *** *** *** *** *** *** *** **$

如果需要db文件分析,但是并没有产生,可参考MTK平台如何获取所有异常的AEE db文件来生成db文件。

(2)db文件解析

在产生的db文件后,一般文件名:aee_exp/db.00.NE/db.00.NE.dbg,可通过Mtk提供的Tools工具Gat来解析(当中的MediatekDBViewer),进而可解析出如下:

Exception Log Time:[Thu Mar  3 11:34:36 CST 2022] [355.182551]Exception Class: Native (NE)
Exception Type: SIGABRTCurrent Executing Process: pid: 690, tid: 10062/vendor/bin/hw/camerahalserverBacktrace: #00 pc 00062b20  /apex/com.android.runtime/lib/bionic/libc.so (abort+172) (BuildId: 6a24d276a45a50f2b3001b261bd2c63a)#01 pc 00004cf3  /system/lib/liblog.so (__android_log_default_aborter+6) (BuildId: 5dc5d63c2a2976e23b23e8e92482e701)#02 pc 00005403  /system/lib/liblog.so (__android_log_assert+174) (BuildId: 5dc5d63c2a2976e23b23e8e92482e701)#03 pc 000f0027  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::onDIPStreamBaseCB(NSCam::Feature::P2Util::DIPParams const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+734) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#04 pc 000f6b83  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::CookieStore<NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData> >::staticProcessCB(NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>::T_Msg const&, NSCam::Feature::P2Util::DIPParams, void*, bool)+174) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#05 pc 000f6a79  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::CookieStore<NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData> >::enque(NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>*, NSCam::Feature::P2Util::DIPStream*, NSCam::Feature::P2Util::DIPParams, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+400) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#06 pc 000f0b65  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::DIPStreamBase<NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData>::enqueDIPStreamBase(NSCam::Feature::P2Util::DIPStream*, NSCam::Feature::P2Util::DIPParams const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData const&)+100) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#07 pc 000ef22f  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::enqueFeatureStream(NSCam::Feature::P2Util::DIPParams&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData&)+386) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#08 pc 000edc07  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::runP2HW(android::sp<NSCam::NSCamFeature::NSFeaturePipe::StreamingFeatureRequest> const&, NSCam::NSCamFeature::NSFeaturePipe::G::P2AEnqueData&, std::__1::vector<NSCam::NSCamFeature::NSFeaturePipe::P2G::P2HW, std::__1::allocator<NSCam::NSCamFeature::NSFeaturePipe::P2G::P2HW> > const&, std::__1::vector<NSCam::NSCamFeature::NSFeaturePipe::P2G::PMDP, std::__1::allocator<NSCam::NSCamFeature::NSFeaturePipe::P2G::PMDP> > const&)+326) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#09 pc 000eb5c7  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::processP2A(android::sp<NSCam::NSCamFeature::NSFeaturePipe::StreamingFeatureRequest> const&, NSCam::NSCamFeature::NSFeaturePipe::RSCResult const&)+642) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)#10 pc 000eb18d  /vendor/lib/libmtkcam.featurepipe.streaming.so (NSCam::NSCamFeature::NSFeaturePipe::G::P2ANode::onThreadLoop()+736) (BuildId: c3ebd39afd08fbf5c10379afb8965ea0)$** *** *** *** *** *** *** *** Exception *** *** *** *** *** *** *** **$

(3)使用addr2line来定位文件和行数

(A)addr2line参数使用

用法:addr2line [选项] [地址]-a --addresses         Show addresses-b --target=<bfdname>  Set the binary file format-e --exe=<executable>  Set the input file name (default is a.out)-i --inlines           Unwind inlined functions-j --section=<name>    Read section-relative offsets instead of addresses-p --pretty-print      Make the output easier to read for humans-s --basenames         Strip directory names-f --functions         Show function names-C --demangle[=style]  Demangle function names-R --recurse-limit     Enable a limit on recursion whilst demangling.  [Default]-r --no-recurse-limit  Disable a limit on recursion whilst demangling-h --help              Display this information-v --version           Display the program's version

常用的如下几个参数:

-a   在函数名、文件和行号信息之前,显示地址,以十六进制形式
-b  指定目标文件的格式为bfdname
-e  指定需要转换地址的可执行文件名
-j      给出的地址代表指定section的偏移,而非绝对地址
-f      在显示文件名、行号输出信息的同时显示函数名信息
-p  使得该函数的输出信息更加人性化,每一个地址的信息占一行

(B)使用方法

  • -e 后面加上so的文件名
  • -f 同时输出函数名称
//addr2line  -e  '/out/target/product/k39tv1_bsp_1g/symbols/system/lib/liblog.so'  00005403  -f
__android_log_call_aborter
system/core/liblog/logger_write.cpp:189//addr2line  -e  '/code/m896_mt39_Bengal/out/target/product/k39tv1_bsp_1g/symbols/vendor/lib/libmtkcam.featurepipe.streaming.so'  000f0027  -f
vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/streaming/G_P2ANode.cpp:918

(C)addr2line得到行号为??:?或??:0的原因

如果遇到addr2line得到??:?或??:0的情况,原因就是编译得到的so文件没有附加上符号表(symbolic)信息。

如下:

./symbols/vendor/lib/libmtkcam.featurepipe.streaming.so //使用symbols目录下的so
./vendor/lib/libmtkcam.featurepipe.streaming.so./symbols/system/lib/liblog.so //使用symbols目录下的so
./system/lib/liblog.so

利用addr2line命令定位backtrace的Error行数相关推荐

  1. 利用Linux命令行进行文本按行去重并按重复次数排序yes

    http://www.tuicool.com/articles/fEzERj Linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linu ...

  2. 利用Linux命令行进行文本按行去重并按重复次数排序

    利用Linux命令行进行文本按行去重并按重复次数排序 linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去重 ...

  3. linux定位so快捷方式_使用addr2line命令定位到行号解析.so的文件

    一.背景 最新遇到crash 的问题 ,这里来简单说明怎么使用addr2line 命令来定位问题 首先获取到tombstone log 找到出现的位置如下log Process Name: 'UNKN ...

  4. linux-wc命令(用于计算字数、行数等)

    Linux wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据. 语 ...

  5. linux命令查找行数命令,Linux中用grep命令来搜索单词及统计匹配的行数

    使用 grep 命令来搜索多个单词要使用 grep 命令来搜索多个字符串或单词,我们该怎么做?例如我想要查找 /path/to/file 文件中的 word1.word2.word3 等单词,我怎么样 ...

  6. 正确定位混淆后Crash代码行数

    Android--定位混淆后Crash代码行数 一.需求背景 二.前期准备 三.对混淆日志进行还原 四.示例 一.需求背景 打包时需要对代码进行混淆,目的是增加安全性,防⽌反编译.但这会导致App崩溃 ...

  7. 一行命令统计出多个文件夹中的多种类型的代码行数

    问题 现在有这些文件夹,里面有不类类型的文件,包括Java,C#和C++.如果我们想知识中间的代码行数应该如何完成呢? drwxrwxrwx 1 hao hao 4.0K Feb 4 17:15 20 ...

  8. 如何统计Android的代码行数

    由于Android Studio自带了代码统计的功能,所以我们可以直接使用命令来统计代码的行数.打开终端,用cd命令 定位到project所在的文件夹,然后调用以下命名就可以把每一个源码文件行数及总数 ...

  9. android ScrollView 控制行数

    利用ScrollView 来控制textView 显示的行数 <ScrollViewandroid:layout_width="fill_parent"android:lay ...

  10. 使用PYTHON统计项目代码行数

    目录 一 使用PYTHON统计项目代码行数 二 应用实例 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 使用PYTHON统计项目代码行数 遇到一个非常小的需求:统计一个项目里头的各类源代码 ...

最新文章

  1. 旅游网站的主页代码_一个在优化的网站主页内容应该如何设计?
  2. CyclicBarrier使用与原理
  3. BigInteger和BigDecimal类
  4. Apache SparkStreaming 简介和编程模型
  5. 第八届蓝桥杯决赛 图书排列
  6. mailscanner参数
  7. sagan 自注意力_请使用英语:自我注意生成对抗网络(SAGAN)
  8. matlab2018b中svm无法运行,关于matlab2018a版本错误使用 svmclassify 分类器
  9. gin的Bindxxx和ShouldBindxxx的区别
  10. 【NIPS 2018】循环World模型促进策略演变
  11. ubuntu下MySQL无法启动Couldn't find MySQL server (/usr/bin/mysqld_safe)”
  12. 我的工程师进阶之路 - 2022更新
  13. GeoDa 空间自相关操作步骤
  14. python实现用户登录界面代码_python编辑用户登入界面的实现代码
  15. ROS笔记(38) Xbox360手柄控制移动
  16. win10系统电脑提示此程序被组策略阻止的解决办法
  17. ​Apache 软件基金会 2021 年度报告亮点解读
  18. 登录爬取拉勾网2.0 Python selenium
  19. xml解析之dom、dom4j、SAX
  20. Blender图解教程:手把手教你做马里奥问号箱 一 强迫症慎用版(附模型下载)

热门文章

  1. win10系统下JDK环境变量配置失败的原因
  2. 两款投屏和跨屏协作软件
  3. Everything下载及使用教程【非常详细】(磁盘文件搜索神器)
  4. SEGGER System View - J-Link Library not found
  5. oracle是什么数据库管理系统,数据库管理系统
  6. JavaScript弹窗提示
  7. 西瓜数据集介绍以及获取。
  8. 我国高等数学教材不能误导学生
  9. python xlwt_python使用xlwt编辑excel
  10. [Zcu106开发]离线环境下用Vitis搭建Zcu106嵌入式系统神经网络加速器踩坑实录