当前位置:网站首页>All the way, I was forced to talk about C code debugging skills and remote debugging
All the way, I was forced to talk about C code debugging skills and remote debugging
2020-11-06 21:09:00 【One line code farming technology】
One : background
1. Tell a story
Every time the project is pre delivered , There will always be all kinds of wonderful flowers , I think it's necessary to sort it out and how to solve it quickly , Let the latter avoid the pit , This article will talk about what I have heard and met :
- I went to , The code of local environment runs very fast , There's something wrong with the test environment
- I went to , Provided by a third party dll Run out bug 了
Two : The solution of two big holes
1. The local environment is OK , There's something wrong with the test
I believe that many friends have similar experience with me , Clearly program code , Configuration files are the same , Move a nest and there's a problem , You say no , Now that the problem has gone wrong, how to solve it quickly ? Yes , It's just debugging , But the program is deployed in centos On , Send a visualstudio It's not realistic to go up there , What do you want to do with debugging under this constraint level ? Pretty good , It can be debugged remotely , Then we quickly found that one of the environment variables in the test machine was wrong , The whole story is clear , Next, let's see how to achieve local To centos Of Remote debugging .
1) Test code
For the convenience of demonstration , I was there Action Read from strategy environment variable .
public class HomeController : Controller
{
public IActionResult Index()
{
ViewBag.strategy = Environment.GetEnvironmentVariable("strategy");
return View();
}
}
2) install SSH
To debug remotely , It needs to be installed on the remote machine SSH, Because the process debugging is attached later With the help of SSH Get through .
yum install openssh-server unzip curl
After installation , You can see 22 Port started
[root@localhost data]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1126/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3037/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1739/master
tcp6 0 0 :::22 :::* LISTEN 1126/sshd
tcp6 0 0 ::1:631 :::* LISTEN 3037/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1739/master
3) Program release configuration
Release configuration , The first thing to make sure is debug edition , The second thing to make sure is Portable mode (Portable), Here's the picture :

4) Debug with attached processes
Select... In the menu bar :Debug -> Attach To Process, Then fill in ssh All kinds of information needed , Here's the picture :

Click on Connect after , You can see the remote machine dotnet Program Process number , Select the process to attach , stay Select Code Type Choose from Nanaged (.NET Core for Unix) that will do , Here's the picture :

5) Smooth debugging
stay Type : http://192.168.142.130/Home/Index , You can see my C# Code hit , I also got the remote machine's environment variable , The problem is solved .

2. The third party dll Out bug 了
Debugging programs use F9 debug , I believe many friends know that breakpoints can be edited , for instance : Set expression breakpoints , Filter breakpoints , Hit number breakpoint , Action breakpoint , Here is the picture :

The first question is , These fancy breakpoints , Do you really know how to use ? Do you really use it often ?
Let me answer , I won't use it until I have to , I'd rather add test statements that are easy to debug into my code , There are three reasons :
- More flexible
That's obvious , Setting conditions in the panel is much more cumbersome than setting conditions with pure statements , Point to point , And conditional superposition , It's complicated , I don't like .
- Powerful
There are only simple and relationships on the edit panel , And the conditions are the same level , It is impossible to achieve the inclusion relation of each condition or relation and hierarchy or recursion , therefore ... Can't ...
- Easier to save
This is interesting , Right click on the breakpoint to pop up the edit panel , Click the left button to close the breakpoint , Here's the problem , Often because of cheap hands , I want to click the right button, but I click the left button .... The hard set conditions are gone ... It's really gone , From then on , The road turns black . Here's the picture :

So breakpoint editing really doesn't work ? I think it's only in debugging scenarios where you can't modify statements , For example, I met debugging factory packaged dll, ha-ha , Now that we're talking about breakpoints , I will use it. dnspy Demonstrate a few breakpoints for you to review !
1) Test code
For the convenience of demonstration , use for The circular case is the best .
public static void Main(string[] args)
{
var sum = 0;
for (int i = 0; i < 10000; i++)
{
sum += i;
}
Console.WriteLine($"sum={sum}");
}
2) I hope to sum = 1035 Hit the breakpoint
The conditional expression breakpoint is OK , It's simple , As shown below :

3) Find all that can be 1800 Divisible number , And record what happened at that time i and sum value
You can use Action Logging of breakpoints , stay for In loop iteration , There is no need to break breakpoints , Just record the current... In a specific state i and sum Value , Very helpful for debugging code , Here's the picture :

3、 ... and : summary
Generally speaking, these two experiences are also included in my step-by-step experience , It would be better if I could help you , So much for this article , See you later !
More high quality dry goods : See my GitHub: dotnetfly
版权声明
本文为[One line code farming technology]所创,转载请带上原文链接,感谢
边栏推荐
- Contract trading system development | construction of smart contract trading platform
- ES6 learning notes (4): easy to understand the new grammar of ES6
- Python basic data type -- tuple analysis
- 事务的本质和死锁的原理
- C語言I部落格作業03
- 大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术
- Diamond standard
- list转换map(根据key来拆分list,相同key的value为一个list)
- How does cglib implement multiple agents?
- How much disk space does a file of 1 byte actually occupy
猜你喜欢

Use modelarts quickly, zero base white can also play AI!

How much disk space does a file of 1 byte actually occupy

git远程库回退指定版本

Small program introduction to proficient (2): understand the four important files of small program development

Road to simple HTML + JS to achieve the most simple game Tetris

To teach you to easily understand the basic usage of Vue codemirror: mainly to achieve code editing, verification prompt, code formatting

ES6 learning notes (5): easy to understand ES6's built-in extension objects

嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:王涛

What is the purchasing supplier system? Solution of purchasing supplier management platform

EOS founder BM: what's the difference between UE, UBI and URI?
随机推荐
It's time for your financial report to change to a more advanced style -- financial analysis cockpit
How does cglib implement multiple agents?
行为型模式之解释器模式
MongoDB与SQL常用语法对应表
Live broadcast preview | micro service architecture Learning Series live broadcast phase 3
C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)
【:: 是什么语法?】
Some operations kept in mind by the front end foundation GitHub warehouse management
Outsourcing is really difficult. As an outsourcer, I can't help sighing.
An article will introduce you to CSS3 background knowledge
Isn't data product just a report? absolutely wrong! There are university questions in this category
git远程库回退指定版本
面试官: ShardingSphere 学一下吧
Contract trading system development | construction of smart contract trading platform
Use modelarts quickly, zero base white can also play AI!
2020-08-29:进程线程的区别,除了包含关系之外的一些区别,底层详细信息?
Zero basis to build a web search engine of its own
嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:曾文旌
What is the tensor in tensorflow?
IPFs rudder filecoin landing at the same time, fil currency price broke a thousand