作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
- cnblogs博客
- zhihu
- Github
- 公众号:一本正经的瞎扯
总结:想不花钱就变强是不可能的,调试 C# 很困难的核心原因可能是你没有花钱买 Visual Studio.
下面是 在 linux 下调试 C# 程序的步骤。
1. 安装
- 如果没有安装 dotnet, 就先安装 dotnet
- curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
- chmod +x dotnet-install.sh
- ./dotnet-install.sh --channel 10.0
- # 加到环境变量
- echo "export DOTNET_ROOT=$HOME/.dotnet" >> ~/.bashrc
- echo "export PATH=$DOTNET_ROOT:$PATH" >> ~/.bashrc
- source ~/.bashrc
- # 验证
- dotnet --version
复制代码- wget https://github.com/Samsung/netcoredbg/releases/download/3.1.3-1062/netcoredbg-linux-amd64.tar.gz
- sudo tar -zxvf netcoredbg-linux-amd64.tar.gz -C /usr/local/bin
- echo "export PATH=/usr/local/bin/netcoredbg/:$PATH" >> ~/.bashrc
- source ~/.bashrc
- # 验证
- netcoredbg --version
复制代码 2. 编译代码
在 .csproj 文件中加入:- <PropertyGroup>
- <DebugType>portable</DebugType>
- <DebugSymbols>true</DebugSymbols>
- <EmbedAllSources>true</EmbedAllSources>
- <EmbedUntrackedSources>true</EmbedUntrackedSources>
- <Optimize>false</Optimize>
- </PropertyGroup>
复制代码- dotnet build -c Debug $(PROJECT).csproj -o ../../build/code-snippets/$(PROJECT)/
复制代码 编译 debug 版本。
3. 运行调试器
- netcoredbg \
- --interpreter=cli -- \
- dotnet ../../build/code-snippets/ConsoleLoggerCli/ConsoleLoggerCli.dll -threadpool.max=1
复制代码 注意:
- 一定要以 dotnet 来运行
- 要运行的二进制程序是 .dll 文件
- 后面可以跟命令行参数。 (-threadpool.max=1 是我自己程序的命令行参数)
- 输入 help 可以查看命令
设置断点
- break Program.cs:10 # break 可以简写为 b
复制代码 这里指定 Main() 函数中的一行为断点。
执行
开始运行到断点。
单步
- 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 这个不是调试工具。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
|
|
相关推荐
|
|
|