找回密码
 立即注册
首页 业界区 安全 如何在 linux 下使用命令行调试器调试 C# 程序 ...

如何在 linux 下使用命令行调试器调试 C# 程序

臧莞然 4 天前
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!

  • cnblogs博客
  • zhihu
  • Github
  • 公众号:一本正经的瞎扯
    1.png

总结:想不花钱就变强是不可能的,调试 C# 很困难的核心原因可能是你没有花钱买 Visual Studio.
下面是 在 linux 下调试 C# 程序的步骤。
1. 安装


  • 如果没有安装 dotnet, 就先安装 dotnet
  1. curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
  2. chmod +x dotnet-install.sh
  3. ./dotnet-install.sh --channel 10.0
  4. # 加到环境变量
  5. echo "export DOTNET_ROOT=$HOME/.dotnet" >> ~/.bashrc
  6. echo "export PATH=$DOTNET_ROOT:$PATH" >> ~/.bashrc
  7. source ~/.bashrc
  8. # 验证
  9. dotnet --version
复制代码

  • 安装调试器
  1. wget https://github.com/Samsung/netcoredbg/releases/download/3.1.3-1062/netcoredbg-linux-amd64.tar.gz
  2. sudo tar -zxvf netcoredbg-linux-amd64.tar.gz -C /usr/local/bin
  3. echo "export PATH=/usr/local/bin/netcoredbg/:$PATH" >> ~/.bashrc
  4. source ~/.bashrc
  5. # 验证
  6. netcoredbg --version
复制代码
2. 编译代码


  • 把源码编译到二进制中
在 .csproj 文件中加入:
  1.   <PropertyGroup>
  2.     <DebugType>portable</DebugType>
  3.     <DebugSymbols>true</DebugSymbols>
  4.     <EmbedAllSources>true</EmbedAllSources>
  5.     <EmbedUntrackedSources>true</EmbedUntrackedSources>
  6.     <Optimize>false</Optimize>
  7.   </PropertyGroup>
复制代码

  • 编译
  1. dotnet build -c Debug $(PROJECT).csproj -o ../../build/code-snippets/$(PROJECT)/
复制代码
编译 debug 版本。
3. 运行调试器
  1. netcoredbg \
  2.         --interpreter=cli -- \
  3.         dotnet ../../build/code-snippets/ConsoleLoggerCli/ConsoleLoggerCli.dll -threadpool.max=1
复制代码
注意:

  • 一定要以 dotnet 来运行
  • 要运行的二进制程序是 .dll 文件
  • 后面可以跟命令行参数。 (-threadpool.max=1 是我自己程序的命令行参数)
  • 输入 help 可以查看命令
设置断点
  1. break Program.cs:10  # break 可以简写为 b
复制代码
这里指定 Main() 函数中的一行为断点。
执行
  1. run   # 或者简写为 r
复制代码
开始运行到断点。
单步


  • list 或 l:  浏览源码
  • step 或 s:  执行到函数内部
  • next 或 n: 执行到下一行
这个工具很难用,执行 n 后,需要手动再执行 l 来显示源码。


  • print 或 p: 输出某个变量的值:

    • 输出 byte[] 中的字符串内容:  p System.Text.Encoding.UTF8.GetString(myBytes)

4. 避坑

以下方法我尝试过不行:

  • macos + arm64: netcoredbg 没有 arm64 版本。想要在 macos 上调试估计就只能用 docker 或者改 linux 平台了。
  • vsdbg

    • 下载: curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/.vsdbg
    • 使用: ~/.vsdbg/vsdbg --interpreter=mi -- dotnet ../../build/code-snippets/$(PRJ)/$(PRJ) -- -threadpool.max=1, 根本就无法运行

  • dotnet-sos

    • 下载: dotnet tool install -g dotnet-sos
    • 安装: dotnet-sos install
    • lldb 下调试: lldb -- ../../build/code-snippets/$(PRJ)/$(PRJ) -threadpool.max=1, lldb 中执行到 setsymbolserver -ms 时崩溃。macos 下无法使用。

  • dotnet tool install --global dotnet-dump 这个不是调试工具。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册