国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim

這篇具有很好參考價值的文章主要介紹了[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. containerd安裝

[Ubuntu 22.04] 安裝containerd

2. 源碼編譯

??主要步驟如下:

  • 1、從github下載containerd源碼
    • git clone git@github.com:containerd/containerd.git
  • 2、切換到想要debug的分支或者tag,我這里選擇切換到1.7.2版本的tag
    • git branch v1.7.2 v1.7.2 && git checkout v1.7.2
  • 3、下載contaienrd的依賴
    • cd containerd && go mod tidy
  • 4、編譯containerd源碼
    • make build GODEBUG=true all
root@containerd:~/workspace/containerd# 
root@containerd:~/workspace/containerd# 
root@containerd:~/workspace/containerd# 
root@containerd:~/workspace/containerd# make build GODEBUG=true all
+ build
+ bin/ctr
go build -gcflags=all="-N -l" -gcflags=-trimpath=/root/go/src -buildmode=pie  -o bin/ctr -ldflags '-X github.com/containerd/containerd/version.Version=v1.7.2-2-gbe3ad13c1 -X github.com/containerd/containerd/version.Revision=be3ad13c14e0e1da2840fc6496f2bcefefb99764 -X github.com/containerd/containerd/version.Package=github.com/containerd/containerd  ' -tags "urfave_cli_no_docs static_build"  ./cmd/ctr
+ bin/containerd
go build -gcflags=all="-N -l" -gcflags=-trimpath=/root/go/src -buildmode=pie  -o bin/containerd -ldflags '-X github.com/containerd/containerd/version.Version=v1.7.2-2-gbe3ad13c1 -X github.com/containerd/containerd/version.Revision=be3ad13c14e0e1da2840fc6496f2bcefefb99764 -X github.com/containerd/containerd/version.Package=github.com/containerd/containerd  ' -tags "urfave_cli_no_docs static_build"  ./cmd/containerd
+ bin/containerd-stress
go build -gcflags=all="-N -l" -gcflags=-trimpath=/root/go/src -buildmode=pie  -o bin/containerd-stress -ldflags '-X github.com/containerd/containerd/version.Version=v1.7.2-2-gbe3ad13c1 -X github.com/containerd/containerd/version.Revision=be3ad13c14e0e1da2840fc6496f2bcefefb99764 -X github.com/containerd/containerd/version.Package=github.com/containerd/containerd  ' -tags "urfave_cli_no_docs static_build"  ./cmd/containerd-stress
+ bin/containerd-shim
+ bin/containerd-shim-runc-v1
+ bin/containerd-shim-runc-v2
+ binaries
root@containerd:~/workspace/containerd# 
root@containerd:~/workspace/containerd# 
root@containerd:~/workspace/containerd# ls -lhtr bin/
total 158M
-rwxr-xr-x 1 root root  31M Jul 29 14:34 ctr
-rwxr-xr-x 1 root root  61M Jul 29 14:34 containerd
-rwxr-xr-x 1 root root  29M Jul 29 14:34 containerd-stress
-rwxr-xr-x 1 root root 9.4M Jul 29 14:34 containerd-shim
-rwxr-xr-x 1 root root  12M Jul 29 14:34 containerd-shim-runc-v1
-rwxr-xr-x 1 root root  17M Jul 29 14:34 containerd-shim-runc-v2
root@containerd:~/workspace/containerd# 

??注意,編譯的時候containerd會依賴btrfs文件系統(tǒng),如果沒有安裝,編譯的時候會報錯(提示:linux/btrfs_tree.h: No such file or directory)。按照文檔第一步安裝containerd不會遇到這個問題。

3. 驗證編譯的二進制文件是否含有調試需要的信息

??注意,以下三種驗證方式,選擇其中的一種驗證成功即可。

3.1. objdump工具驗證

??正確的現(xiàn)象如下,執(zhí)行objdump --syms bin/containerd是可以看到調試信息的

root@containerd:~/workspace/containerd# objdump --syms bin/containerd

bin/containerd:     file format elf64-x86-64

SYMBOL TABLE:
0000000000000000 l    df *ABS*  0000000000000000              Scrt1.o
00000000000003b4 l     O .note.ABI-tag  0000000000000020              __abi_tag
0000000000000000 l    df *ABS*  0000000000000000              go.go
00000000003ad4c0 l     F .text  0000000000000000              runtime.text
00000000003ad4c0 l     F .text  0000000000000059              internal/cpu.Initialize
00000000003ad520 l     F .text  0000000000000537              internal/cpu.processOptions
00000000003ada60 l     F .text  0000000000000026              internal/cpu.indexByte
00000000003adaa0 l     F .text  0000000000000925              internal/cpu.doinit
00000000003ae3e0 l     F .text  0000000000000006              internal/cpu.isSet
00000000003ae400 l     F .text  000000000000001b              internal/cpu.cpuid.abi0
00000000003ae420 l     F .text  0000000000000011              internal/cpu.xgetbv.abi0
00000000003ae440 l     F .text  0000000000000009              internal/cpu.getGOAMD64level.abi0
00000000003ae460 l     F .text  000000000000007a              type:.eq.internal/cpu.option
00000000003ae4e0 l     F .text  00000000000000e6              type:.eq.[6]internal/cpu.option
00000000003ae5e0 l     F .text  0000000000000003              runtime/internal/atomic.(*Int32).Load
00000000003ae600 l     F .text  0000000000000003              runtime/internal/atomic.(*Int32).Store
00000000003ae620 l     F .text  000000000000000d              runtime/internal/atomic.(*Int32).CompareAndSwap
00000000003ae640 l     F .text  000000000000000a              runtime/internal/atomic.(*Int32).Add
00000000003ae660 l     F .text  0000000000000004              runtime/internal/atomic.(*Int64).Load
00000000003ae680 l     F .text  0000000000000004              runtime/internal/atomic.(*Int64).Store
00000000003ae6a0 l     F .text  000000000000000f              runtime/internal/atomic.(*Int64).CompareAndSwap
00000000003ae6c0 l     F .text  0000000000000007              runtime/internal/atomic.(*Int64).Swap
00000000003ae6e0 l     F .text  000000000000000d              runtime/internal/atomic.(*Int64).Add
00000000003ae700 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint8).Load
00000000003ae720 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint8).Store
00000000003ae740 l     F .text  0000000000000004              runtime/internal/atomic.(*Uint8).And
00000000003ae760 l     F .text  0000000000000004              runtime/internal/atomic.(*Uint8).Or
00000000003ae780 l     F .text  0000000000000024              runtime/internal/atomic.(*Bool).Load
00000000003ae7c0 l     F .text  000000000000001f              runtime/internal/atomic.(*Bool).Store
00000000003ae7e0 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint32).Load
00000000003ae800 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint32).LoadAcquire
00000000003ae820 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint32).Store
00000000003ae840 l     F .text  0000000000000003              runtime/internal/atomic.(*Uint32).StoreRelease
00000000003ae860 l     F .text  000000000000000d              runtime/internal/atomic.(*Uint32).CompareAndSwap
00000000003ae880 l     F .text  000000000000000d              runtime/internal/atomic.(*Uint32).CompareAndSwapRelease
00000000003ae8a0 l     F .text  0000000000000005              runtime/internal/atomic.(*Uint32).Swap
00000000003ae8c0 l     F .text  0000000000000004              runtime/internal/atomic.(*Uint32).And
00000000003ae8e0 l     F .text  0000000000000004              runtime/internal/atomic.(*Uint32).Or

??錯誤的信息如下,會提示no symbols,這種二進制無法進行debug

root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd# objdump --syms /usr/local/bin/containerd

/usr/local/bin/containerd:     file format elf64-x86-64

SYMBOL TABLE:
no symbols


root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd#

3.2. file工具驗證

??正確信息如下,會顯示with debug_info, not stripped

root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd# file bin/containerd
bin/containerd: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=9bb291e61e1eceb23359dc29100845e5c1edf763, for GNU/Linux 3.2.0, with debug_info, not stripped
root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd#

??錯誤信息如下,會顯示stripped,說明不包含調試信息,無法進行debug

root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd# file /usr/local/bin/containerd
/usr/local/bin/containerd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=322f89b7e351fe2ccfaa0fe30de79c76d49d6e26, for GNU/Linux 3.2.0, stripped
root@containerd:~/workspace/containerd#

3.3. dlv工具驗證

??正確的調試信息如下:

root@containerd:~/workspace/containerd# dlv exec  bin/containerd
Type 'help' for list of commands.
(dlv)
(dlv)
(dlv)
(dlv)
(dlv)
(dlv) exit
root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd#

??錯誤的調試信息如下,會提示:no debug info found

root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd# dlv exec  /usr/local/bin/containerd
Warning: no debug info found, some functionality will be missing such as stack traces and variable evaluation.
Type 'help' for list of commands.
(dlv)
(dlv)
(dlv)
(dlv)
(dlv) exit

4. debug

??debug containerd步驟如下:

  • 1、利用ps -ef|gerp containerd查看containerd啟動所需要的參數(shù),這一步特別重要,尤其是在debug k8s源碼的時候,k8s的每一個組件都帶了很多命令行參數(shù),想要調試這些組件,必須把這些組件的啟動參數(shù)原封不動的加入到dlv調試命令當中
    • 注意,實際上執(zhí)行上述命令之后會發(fā)現(xiàn),containerd并沒有啟動參數(shù),因此無需關心。
  • 2、通過dlv命令啟動containerd,啟動命令我們可以從IDEA remote debug功能拷貝過來
    • dlv --listen=:12345 --headless=true --api-version=2 --accept-multiclient exec bin/containerd
    • 注意:這里在啟動contaienrd的時候沒有指定任何參數(shù),實際上也可以根據(jù)自己的情況加入containerd參數(shù),譬如指定containerd的配置文件的位置(containerd默認配置文件為:/etc/containerd/config.toml),也可以指定調試的debug級別,譬如:
      • dlv --listen=:12345 --headless=true --api-version=2 --accept-multiclient exec bin/containerd -- --config=/root/mycontainerd/config.toml --log-level=debug
  • 3、在IDEA啟動debug,連接到遠程調試
    • 注意:在啟動IDEA調試之前,你需要在想要debug的位置增加斷點,否則程序啟動會直接運行起來,等你這個時候打斷點,很可能就晚了。
    • 注意:在啟動IDEA調試之前,你需要修改IDEA操作系統(tǒng)標識為Linux

[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim,ContainerD,工具,containerd,IDEA,遠程調試,dlv,源碼編譯,ctr,containerd-shim

[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim,ContainerD,工具,containerd,IDEA,遠程調試,dlv,源碼編譯,ctr,containerd-shim
[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim,ContainerD,工具,containerd,IDEA,遠程調試,dlv,源碼編譯,ctr,containerd-shim

??執(zhí)行dlv --listen=:12345 --headless=true --api-version=2 --accept-multiclient exec bin/containerd -- --log-level=debug命令之后,此時會阻塞在這里,千萬不要使用ctrl + c,只有當IDEA連接上來的時候才會開始執(zhí)行

root@containerd:~/workspace/containerd#
root@containerd:~/workspace/containerd# dlv --listen=:12345 --headless=true --api-version=2 --accept-multiclient exec bin/containerd -- --log-level=debug
API server listening at: [::]:12345
2023-07-29T15:06:45+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim,ContainerD,工具,containerd,IDEA,遠程調試,dlv,源碼編譯,ctr,containerd-shim文章來源地址http://www.zghlxwxcb.cn/news/detail-632830.html

到了這里,關于[containerd] 在Windows上使用IDEA遠程調試containerd, ctr, containerd-shim的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 開發(fā)工具篇第二十六講:使用IDEA進行本地調試和遠程調試

    Debug用來追蹤代碼的運行流程,通常在程序運行過程中出現(xiàn)異常,啟用Debug模式可以分析定位異常發(fā)生的位置,以及在運行過程中參數(shù)的變化;并且在實際的排錯過程中,還會用到Remote Debug。 本文是開發(fā)工具篇第二十六講,主要介紹基于IDEA的Debug和Remote Debug的技巧。

    2024年02月16日
    瀏覽(99)
  • IDEA遠程DeBug調試

    IDEA遠程DeBug調試

    1. 介紹 當我們在開發(fā)過程中遇到一些復雜的問題或需要對代碼進行調試時,遠程調試是一種非常有用的工具。使用 IntelliJ IDEA 進行遠程調試可以讓你在遠程服務器上的應用程序中設置斷點、查看變量和執(zhí)行調試操作。 遠程調試的好處如下: 提供更方便的調試環(huán)境:通過遠程

    2024年02月11日
    瀏覽(24)
  • idea如何開啟遠程調試

    idea如何開啟遠程調試

    一:打包需要部署的jar包上傳到服務器 二:服務器(開啟遠程調試接口) 三: idea配置remote 上面的Host填寫服務器地址,port填寫你部署jar包時候開放的端口(8453),并且記得開放防火墻的端口,不然外部訪問不到。

    2024年02月14日
    瀏覽(24)
  • idea2023遠程調試

    idea2023遠程調試

    使用idea2023版遠程調試springboot 1.添加remote jvm debug 2.填寫遠程ip, 選擇要調試項目 3.將 參數(shù)附帶到需要遠程調試的jar 命令之前, 重啟即可, 命令一定要在jar包之前 , 即 4.有防火墻的記得開放端口5005 5.其余的跟本地調試一樣, 直接debug 即可

    2024年02月10日
    瀏覽(14)
  • idea遠程服務調試

    idea遠程服務調試

    這里以 idea 新 ui 為例,首先點擊上面的 debug 旁邊的三個小圓點,然后在彈出的框框中選擇 “Edit”,如下圖所示。 然后進入到打開的界面后,點擊左上角的 “+” 進行添加,找到 “Remote JVM Debug”,如下圖所示。 然后設置遠程調用的 ip 和 port ,并且注意要選擇 JDK 版本,然

    2024年01月22日
    瀏覽(16)
  • Idea實現(xiàn)遠程debug調試

    Idea實現(xiàn)遠程debug調試

    2024年04月26日
    瀏覽(25)
  • jvm開啟遠程調試功能;idea遠程debug

    jvm開啟遠程調試功能;idea遠程debug

    有時候一些問題本地調試無法復現(xiàn),這個時候可以開啟 jvm 的遠程調試功能 jdk8 jdk11/17 修改 tomcat 的 bin 下的 catalina.sh 文件 把 jpda_address 對應的 localhost:8000 改為 8000 ,意味著允許任何人訪問。 填上對應的 ip 和端口即可,當然要確保被連接的服務的代碼和本地是一致的,不然代

    2024年02月11日
    瀏覽(22)
  • IDEA實現(xiàn)遠程Debug調試(附上Demo代碼)

    IDEA實現(xiàn)遠程Debug調試(附上Demo代碼)

    ??需要準備JDK1.8環(huán)境,安裝IDEA(版本不限) (1)、創(chuàng)建demo項目 1.File一New一project… 2.Maven Archetype一填寫Name一選擇jdk1.8一選擇Web一創(chuàng)建 (2)、引入依賴 參數(shù)詳解: 【-Xdebug】:通知JVM工作在DEBUG模式下。 【-Xrunjdwp】:通知JVM使用(Java debug wire protocol)運行調試環(huán)境。 【transport】:指

    2024年02月06日
    瀏覽(25)
  • Idea 對容器中的 Java 程序斷點遠程調試

    Idea 對容器中的 Java 程序斷點遠程調試

    直接在java程序中添加log.info(),根據(jù)需要打印信息 然后打包覆蓋,根據(jù)日志查看相關信息 第二種:遠程調試 在IDEA右上角點擊編輯配置 設置相關參數(shù) 在Dockerfile中加入 完整代碼如下: 或直接用命令 啟動容器,然后開啟IDEA的調試模式(注意不是運行),控制臺顯示連接成功即

    2024年02月05日
    瀏覽(26)
  • IDEA 遠程 Debug 調試,你可以不需要,但是要會

    IDEA 遠程 Debug 調試,你可以不需要,但是要會

    遠程debug真的很有用,我個人的真實經歷就是有一次,我新開發(fā)的功能,在生產上沒生效,我詢問了運維多次,運維也多次確認回復說是最新的包,又是查日志,對數(shù)據(jù),仍然沒發(fā)現(xiàn)問題,最后我就采用遠程debug發(fā)現(xiàn)我新開發(fā)的代碼不存在。 所以不需要不要緊,但是要會,作

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包