iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android的soog_ui的调试(go语言)
  • 457
分享到

Android的soog_ui的调试(go语言)

GO调试go语言Android 2022-06-06 12:06:44 457人浏览 八月长安
摘要

1 .源码 soog_ui程序的源码的位置在:build/soong/cmd/soong_ui目录下,有main.Go和Android.bp。

1 .源码

soog_ui程序的源码的位置在:build/soong/cmd/soong_ui目录下,有main.GoAndroid.bp。

2. Go基础 2.1 变量声明
变量名在左,类型在右
var config build.Config
2.2 包引用

在main.go函数中引用build包,build中Config类型的定义。

 15 package main                                                                    
 16                                                                                 
 17 import (                                                                        
 18         "context"                                                               
 19         "flag"                                                                  
 20         "fmt"                                                                   
 21         "os"                                                                    
 22         "path/filepath"                                                         
 23         "strconv"                                                               
 24         "strings"                                                               
 25         "time"                                                                  
 26                                                                                 
 27         "android/soong/ui/build"                                                
 28         "android/soong/ui/logger"                                               
 29         "android/soong/ui/tracer"                                               
 30 )  
78         var config build.Config                                       
 79         if os.Args[1] == "--dumpvars-mode" || os.Args[1] == "--dumpvar-mode" {  
 80                 config = build.NewConfig(buildCtx)                              
 81         } else {                                                                
 82                 config = build.NewConfig(buildCtx, os.Args[1:]...)              
 83         }  

在文件build/soong/ui/build/config.go中

 15 package build                                                                   
 16                                                                                 
 17 import (                                                                        
 18         "io/ioutil"                                                             
 19         "log"                                                                   
 20         "os"                                                                    
 21         "path/filepath"                                                         
 22         "runtime"                                                               
 23         "strconv"                                                               
 24         "strings"                                                               
 25         "time"                                                                  
 26                                                                                 
 27         "android/soong/shared"                                                  
 28 )   
 30 type Config struct{ *configImpl }                                               
 31                                                                                 
 32 type configImpl struct {                                                        
 33         // From the environment                                                 
 34         arguments []string                                                      
 35         goma      bool                                                          
 36         environ   *Environment                                                  
 37                                                                                 
 38         // From the arguments                                                   
 39         parallel   int                                                          
 40         keepGoing  int                                                          
 41         verbose    bool                                                         
 42         checkbuild bool                                                         
 43         dist       bool                                                         
 44         skipMake   bool                                                         
 45                                                                                 
 46         // From the product config                                              
 47         katiArgs     []string                                                   
 48         ninjaArgs    []string                                                   
 49         katiSuffix   string                                                     
 50         targetDevice string                                                     
 51 }  
 ....
350 func (c *configImpl) Arguments() []string {                                                                                                                                                             
351         return c.arguments                                                      
352 } 

在15行声明了是build包,在30行声明个Config结构,在32行定义这个结构。
如果想访问Config中的arguments成员,通过Arguments()函数,而不是直接访问arguments成员。

2.3 打印

打印信息使用fmt.Fprintln函数,在85行中,使用Arguments()函数打印config中的arguments变量。

 78         var config build.Config                                                                                                                                                                         
 79         if os.Args[1] == "--dumpvars-mode" || os.Args[1] == "--dumpvar-mode" {  
 80                 config = build.NewConfig(buildCtx)                              
 81         } else {                                                                
 82                 config = build.NewConfig(buildCtx, os.Args[1:]...)              
 83         }                                                                       
 84                                                                                 
 85         fmt.Fprintln(os.Stderr, "tom 4=",config.Arguments());   
3. soong_ui生成与运行

在lunch()—>build_build_var_cache()—>soong_ui.bash

 574 function lunch()                                                                                         
 575 {                                                                                                        
 576     local answer 
 ....
  622     TARGET_BUILD_VARIANT=$variant \                                             
 623     TARGET_PLATFORM_VERSION=$version \                                          
 624     build_build_var_cache  
 }
  47 function build_build_var_cache()                                                                         
  48 {                                                                                                        
  49     local T=$(gettop)                                                                                    
  50     # Grep out the variable names from the script.                                                       
  51     cached_vars=`cat $T/build/envsetup.sh | tr '()' '  ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
  52     cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' '  ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
  53     # Call the build system to dump the "=" pairs as a shell script.
  54     build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \
  55                         --vars="$cached_vars" \                                                          
  56                         --abs-vars="$cached_abs_vars" \                         
  57                         --var-prefix=var_cache_ \                                                        
  58                         --abs-var-prefix=abs_var_cache_`  
  }

soong_ui.sh的内容如下:

 55 soong_build_go soong_ui android/soong/cmd/soong_ui                              
 56                                                                                 
 57 cd ${TOP}                                                                       
 58 exec "$(getoutdir)/soong_ui" "$@"   

在55行中,编译main.go成soong_ui,在58行中执行soong_ui。

4. 调试方法

在main.go添加debug信息,然后执行lunch命令,就可以Debug soong_ui。

5. dumpvars.go调试

在dumpvars.go中,想通过mt.Fprintln(os.Stderr, “tom--------11112222”);需要"fmt"和"os"两个包,只需要添加os包就可以了。

 17 import (                                                                        
 18         "bytes"                                                                 
 19         "fmt"                                                                   
 20         "strings"                                                               
 21         "os"                                                                    
 22 )     
fmt.Fprintln(os.Stderr, "tom--------11112222");

说明:
1)加入包"os",同时要使用这个包,使用语句fmt.Fprintln(os.Stderr, “tom--------11112222”);.
2)fmt.Printf("")语句,在lunch的终端无法显示。


作者:tom-wei


--结束END--

本文标题: Android的soog_ui的调试(go语言)

本文链接: https://www.lsjlt.com/news/28508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中的日志调试技巧有哪些?
    在软件开发过程中,日志是非常重要的工具,它可以帮助开发者快速定位问题,找到错误的根源。在Go语言中,标准库提供了内置的日志库,可以满足大部分的日志需求。本文将介绍Go语言中的日志调试技巧,以及如何使用标准库来实现日志记录。 一、日志调试技...
    99+
    2023-06-04
    日志 shell 编程算法
  • 如何解决Go语言中的并发调试问题?
    如何解决Go语言中的并发调试问题?引言:并发是Go语言的一大特点,但是并发也带来了一些调试上的挑战。在多个goroutine同时执行的情况下,出现问题时很难追踪和调试错误。本文将介绍一些解决Go语言中并发调试问题的方法,并给出具体的代码示例...
    99+
    2023-10-22
    Go语言(Go language) 解决方案(Solution) 并发调试(Concurrency Debugging)
  • Go语言编译原理之源码调试
    目录前言Goland的debug调试Go源码dlv工具调试Go源码安装常用命令dlv调试抽象语法树构建前言 在前边几篇文章中分享了Go编译过程中的源码实现,本文主要是想分享一下我是怎...
    99+
    2024-04-02
  • go语言调用python
    https://github.com/google/grumpy go语言调用python 的github ...
    99+
    2023-01-31
    语言 python
  • go语言怎么调用c语言
    Go语言可以通过使用cgo工具以及一些特定的语法来调用C语言代码。 以下是调用C语言的Go代码示例: 创建一个名为 `callc....
    99+
    2023-10-27
    go语言 c语言
  • Go 语言单元测试
    php小编鱼仔今天为大家介绍一下Go语言的单元测试。在软件开发中,单元测试是非常重要的一环。通过编写测试用例,我们可以验证代码的正确性,提高代码质量和可维护性。Go语言提供了丰富的测试...
    99+
    2024-02-09
    go语言
  • Go语言中的函数怎么调用
    本篇内容介绍了“Go语言中的函数怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.函数的声明定义//func关键字//getStud...
    99+
    2023-07-02
  • Go语言调度的本质是什么
    本篇内容介绍了“Go语言调度的本质是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先抛出本文的结论:Go 调度的本质是一个生产-消费流...
    99+
    2023-06-15
  • C++技术中的调试:与其他编程语言通信中的调试
    调试 c++++ 与其他语言通信的方法:源代码级调试:使用 gdb、lldb 或 visual studio 调试器。日志记录:生成消息以了解代码行为和错误。远程调试:连接到其他机器上运...
    99+
    2024-05-08
    调试 c++ python intellij idea
  • Linux系统上怎么进行Go语言程序调试
    这篇文章主要讲解了“Linux系统上怎么进行Go语言程序调试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统上怎么进行Go语言程序调试”吧!调试工具Go语言提供了内置的调试器——...
    99+
    2023-07-06
  • Go 语言在 Android 系统中的应用
    go 语言可在 android 系统中广泛应用,可用于构建 android activity 和 service,进行数据处理和分析,具体包括:在 android activity 中使...
    99+
    2024-04-08
    android go 语言 golang
  • GO语言中回调函数的使用
    目录0.前言1.使用2.几个例子2.1 异步访问URL2.2 Sort.Slice函数2.3 简易计算器0.前言 回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,回...
    99+
    2023-03-06
    GO语言回调函数 GO 回调
  • go语言有什么考试
    go语言有Go语言基础知识考试、Go语言高级知识考试、Go语言框架和库考试、Go语言性能优化考试和一些软件工程机构和科技公司会根据自己的需求设计和实施定制的Go语言考试。1、Go语言基础知识考试,目的是验证考生对Go语言的语法、数据类型、变...
    99+
    2023-08-03
  • Go语言中的性能测试与单元测试的区别
    性能测试评估应用程序在不同负载下的性能,而单元测试验证单个代码单元的正确性。性能测试侧重于测量响应时间和吞吐量,而单元测试关注函数输出和代码覆盖率。性能测试通过高负载和并发模拟实际环境,...
    99+
    2024-05-08
    单元测试 性能测试 go语言
  • Go语言中的性能测试与安全测试的关联
    go语言的性能测试与安全测试密切相关。性能测试可测量应用程序的速度和资源消耗,可使用testing包编写基准测试和进行分析。安全测试旨在识别漏洞,go语言提供类型安全、垃圾回收和加密库等...
    99+
    2024-05-08
    安全测试 性能测试 go语言 敏感数据 垃圾回收器 标准库
  • Go语言单元测试的示例分析
    小编给大家分享一下Go语言单元测试的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单元测试分类及其概念1.基本分类测试函数 函数前缀为Test 主要用...
    99+
    2023-06-29
  • 分析与优化:如何调试和优化Go语言中的goroutine程序?
    分析与优化:如何调试和优化Go语言中的goroutine程序? 在Go语言中,goroutine是一种轻量级的线程,可以实现并发执行。使用goroutine可以让程序更高效地利用多核处...
    99+
    2024-03-12
    调试 优化 go语言
  • go语言如何实现数组的调用
    Go语言中可以使用索引来调用数组中的元素。索引从0开始,依次递增。以下是一个示例代码:```gopackage mainimport...
    99+
    2023-10-12
    Go语言
  • GO语言编程中的调试技巧:如何更快地发现问题?
    GO语言是一种快速、简洁、安全的编程语言,很多程序员都喜欢使用它来开发高效的网络服务和并发应用程序。然而,在GO语言编程过程中,程序员难免会遇到一些bug和错误,这时候需要使用调试技巧来快速定位和解决问题。本文将介绍一些GO语言编程中的调...
    99+
    2023-10-15
    编程算法 javascript git
  • Go语言在面试中的常见问题
    Go语言在近年来的发展中,成为了一个备受关注的编程语言。其简洁、高效、安全的特点,使得越来越多的公司和开发者开始关注和使用它。作为一个Go语言的开发者,我们需要掌握它的基本语法和常用库函数,同时也需要了解一些常见的面试问题,以便在面试中更...
    99+
    2023-06-13
    load 面试 shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作