那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony系統如何使用gdb調試init

OpenHarmony技術社區 ? 來源:OpenHarmony技術社區 ? 2023-01-15 15:53 ? 次閱讀

OpenHarmony 適配新的開發板時,啟動流程 init 大概率會出現問題。

其為內核直接拉起的第一個用戶態進程,問題定位手段只能依賴代碼走讀和增加調試打印,初始化過程中系統崩潰的問題就更難定位了。如果能使用 gdb 調試 init,會極大提高定位效率。

本文將詳細闡釋二次啟動的標準系統如何使用 gdb 調試 init。

用 gdb 調試 init

①編譯出帶 debug 信息的調試版本

將 gdb 打包到系統鏡像中。init 不正常的情況下,系統無法正常啟動工作,無法使用 hdc 工具加載 gdb 工具,所以直接在制作鏡像時,將其打包到系統鏡像 bin 目錄下。

修改 deviceoardhihope k3568cfgBUILD.gn 打包腳本如下,注意保證 gdb 工具已放置在此本目錄下。

44ce7bc0-94a5-11ed-bfe3-dac502259ad0.png

②調試版本鏡像帶符號

需要修改鏡像配置文件,修改其大小限制,尤其是 system.img,編譯失敗時不會提示實際鏡像大小,需要修改到 5G 以上。

44dabc0a-94a5-11ed-bfe3-dac502259ad0.png

③編譯調試版本,打開版本調試開關

./build.sh--product-name=XXX--gn-args="is_debug=trueuse_unstripped_as_runtime_outputs=true"

上述 debug 版本只能調試普通功能而不能調試 init,還需要對 init 服務的源碼進行部分適配修改,init 功能調試正常后,需將源碼恢復。

首先,在 init 掛載好 system、vendor 等鏡像,并將根目錄切換到 system 鏡像后。

在啟動第二階段 init 時,切換到 shell 下,停止 init 初始化流程,見下圖 B 處。

44e7c602-94a5-11ed-bfe3-dac502259ad0.png

源碼詳見 basestartupinit servicesinitstandardinit.c。注意:A 處的 CloseStdio() 需要注釋掉。

考慮用 gdb 啟動 init 第二階段,init 絕大部分處理流程都在這一階段,從這里開始就可以用 gdb 調試了,init 第一階段處理相對而言流程簡單一些,代碼走讀和調試打印基本就能解決問題。

在 init 主函數中去掉“不等于進程 1 就返回的處理”,因為用 gdb 起 init 第二階段時,其進程非 1。

源碼詳見basestartupinitservicesinitmain.c。

44f51ef6-94a5-11ed-bfe3-dac502259ad0.png

init 進程中不初始化 Paramworkspace,前面 pid=1 的判斷,在 gdb 調試 init 時條件不成立,所以此處增加判斷 init 名就直接退出的處理。

源碼詳見 basestartupinitservicesparamaseparam_base.c。

45028e88-94a5-11ed-bfe3-dac502259ad0.png

做好了上述準備,就可以用 gdb 調試 init。

把系統啟動,改造后的 init 初始化第一階段完成后,會停在 shell 下,此時使用下述命令啟動 init 第二階段。

gdb--args/bin/init--second-stage為了調試 init 的子進程,還需要 gdb 下述命令:setfollow-fork-modechild

451325d6-94a5-11ed-bfe3-dac502259ad0.png

總結

本文章針對 OpenHarmony 系統在調試 init 初始化流程時,缺少高效的問題定位手段這一痛點,引入了嵌入式系統開發的主流調試工具——gdb,詳細描述了這一方法涉及到的版本編譯、適配點修改以及調試命令操作等細節處理,指導開發者提高定位init問題的效率。

需要注意,當前 gdb 調試 init 方法有局限,不適用輕量級系統、小型系統和一次啟動的標準系統。
審核編輯:陳陳

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gdb
    gdb
    +關注

    關注

    0

    文章

    60

    瀏覽量

    13349
  • init
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3444
  • OpenHarmony
    +關注

    關注

    25

    文章

    3747

    瀏覽量

    16588

原文標題:OpenHarmony上使用gdb調試init

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用GDB調試Linux應用程序

    本篇講解使用GDB調試Linux應用程序,以下以 `hellowld.c` 為例介紹 GDB調試入門。
    發表于 06-27 15:48 ?486次閱讀

    ubuntu下GDB調試GDB簡介

    調試與圖像編程ubuntu下GDB調試Opencv3.x的基本應用ubuntu下GDB調試GDB
    發表于 12-21 08:20

    OpenHarmony系統使用gdb調試init

    --second-stage為了調試init的子進程,還需要gdb下述命令set follow-fork-mode child總結本文章針對OpenHarmony
    發表于 01-10 11:34

    OpenHarmony系統使用gdb調試launcher應用程序

    代碼修改HAP應用在初始化過程中由系統拉起,需要延緩其啟動過程,方便使用gdb工具進程跟蹤調試,修改下述部分代碼,以方便gdb的使用。(以下代碼在O
    發表于 04-10 09:26

    GDB調試命令手冊

    GDB調試命令手冊,感興趣的可以下載看看。
    發表于 11-05 16:36 ?9次下載

    gdb調試器解析

    3.4 gdb調試調試是所有程序員都會面臨的問題。如何提高程序員的調試效率,更好、更快地定位程序中的問題從而加快程序開發的進度,是大家都很關注的問題。就如讀者熟知的Windows下
    發表于 10-18 13:49 ?1次下載

    使用 GDB 調試多進程程序

    GDB 是 linux 系統上常用的 c/c++ 調試工具,功能十分強大。對于較為復雜的系統,比如多進程系統,如何使用
    發表于 04-02 14:33 ?573次閱讀

    嵌入式Linux系統GDB遠程調試的實現

    遠 程調試環境由宿主機GDB和目標機調試stub共同構成,兩者通過串口或TCP連接。使用GDB標準程串行協議協同工作,實現對目標機上的
    發表于 04-02 14:38 ?441次閱讀

    Linux應用的GDB調試的原理及過程分析

    GDB調試是應用程序在開發板上運行,然后在PC機上對開發板上得應用程序進行調試,PC機運行GDB,開發板上運行GDBServer。在應用程序調試
    發表于 03-05 09:44 ?3459次閱讀
    Linux應用的<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>的原理及過程分析

    OpenHarmony系統使用gdb調試init

    OpenHarmony適配新的開發板時,啟動流程init大概率會出現問題,其為內核直接拉起的第一個用戶態進程,問題定位手段只能依賴代碼走讀和增加調試打印,初始化過程中系統崩潰的問題就更
    的頭像 發表于 12-26 12:10 ?978次閱讀

    ARM平臺如何玩轉GDB遠程調試

    前言關于GDB工具GDB工具是GNU項目調試器,基于命令行使用。和其他的調試器一樣,可使用GDB工具單步運行程序、單步執行、跳入/跳出函數、
    的頭像 發表于 09-28 18:17 ?1044次閱讀
    ARM平臺如何玩轉<b class='flag-5'>GDB</b>遠程<b class='flag-5'>調試</b>?

    Linux系統GDB單步調試

    單步調試 ???gdb?helloworld????????????????????? ???(gdb)?break?helloworld.c:18???????? ???(gdb)?
    的頭像 發表于 09-26 16:22 ?668次閱讀

    GDB調試工具的原理

    一、GDB調試工具的原理 1.1 未執行進程調試 啟用gdb調試運行gdb ./test的時候,
    的頭像 發表于 11-09 17:04 ?1004次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調試</b>工具的原理

    如何使用GDB調試工具

    在對應程序目錄中使用下面的命令 gdb test 2、調試已經開始運行的程序進程 調試已經開始運行的程序進程,首先先用top命令查看運行的程序進程的pid如下: 比如我要加載的程序
    的頭像 發表于 11-09 17:17 ?911次閱讀
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>工具

    如何使用linux下gdb調試python程序

    如何使用linux下gdb調試python程序? 在Linux下,可以使用GDB(GNU調試器)來調試Python程序。
    的頭像 發表于 01-31 10:41 ?2740次閱讀
    大发888可靠吗| 川宜百家乐软件| 赌博拘留几天| 网上百家乐是真是假天涯论坛| 24 山杨公斗首择日吉凶| 巴宝莉百家乐官网的玩法技巧和规则| 德州扑克游戏| 百家乐闲9点| 新锦江百家乐官网娱乐网| 大发娱乐场下载| 百家乐一邱大师打法| 百家乐官网送18元彩金| 高要市| 威尼斯人娱乐城地图| 百家乐官网是真人发牌吗| 百家乐官网总厂在哪里| 大发888娱乐城下载地址| 宝博百家乐娱乐城| 百家乐官网如何切牌好| 百家乐官网机器二手| 大发888下载安装包| 新手百家乐指点迷津| 誉博百家乐官网开户导航| 大发888网站是多少| 百家乐群1188999| 专业的百家乐官网玩家| 真人百家乐开户优惠| 万人迷百家乐官网的玩法技巧和规则 | 威尼斯人娱乐欢迎您| 百家乐赢的秘籍在哪| 百家乐官网路纸下| 网上百家乐官网作弊不| 顶级赌场连环夺宝| 百家乐正负计算| 百家乐机器手怎么做弊| 太原百家乐官网的玩法技巧和规则| 百家乐官网心得分享| 网上百家乐游戏| 大发888娱乐城赢钱| 百家乐保单机作弊| 玩百家乐怎么才能赢|