当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 2020-09-09:裸写算法:两个线程轮流打印数字1-100。
- Flink's datasource Trilogy: direct API
- Swagger 3.0 brushes the screen every day. Does it really smell good?
- Get twice the result with half the effort: automation without cabinet
- ES6 learning notes (2): teach you to play with class inheritance and class objects
- Road to simple HTML + JS to achieve the most simple game Tetris
- 美团内部讲座|周烜:华东师范大学的数据库系统研究
- 事务的本质和死锁的原理
- 大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术
- Those who have worked in China for six years and a million annual salary want to share these four points with you
猜你喜欢
PHP application docking justswap special development kit【 JustSwap.PHP ]
Those who have worked in China for six years and a million annual salary want to share these four points with you
ES6 learning notes (3): teach you to use js object-oriented thinking to realize the function of adding, deleting, modifying and checking tab column
Staying up late summarizes the key points of report automation, data visualization and mining, which is different from what you think
Kubernetes and OAM to build a unified, standardized application management platform knowledge! (Internet disk link attached)
面试官: ShardingSphere 学一下吧
Some operations kept in mind by the front end foundation GitHub warehouse management
Pn8162 20W PD fast charging chip, PD fast charging charger scheme
【字节跳动 秋招岗位开放啦】Ohayoo!放学别走,我想约你做游戏!!!
git远程库回退指定版本
随机推荐
(2) ASP.NET Core3.1 Ocelot routing
【字节跳动 秋招岗位开放啦】Ohayoo!放学别走,我想约你做游戏!!!
Network programming NiO: Bio and NiO
How to turn data into assets? Attracting data scientists
To Lianyun analysis: why is IPFs / filecoin mining so difficult?
Behind the record breaking Q2 revenue of Alibaba cloud, the cloud opening mode is reshaping
A small goal in 2019 to become a blog expert of CSDN
MongoDB与SQL常用语法对应表
Diamond standard
With this artifact, quickly say goodbye to spam messages
Outsourcing is really difficult. As an outsourcer, I can't help sighing.
Using an example to understand the underlying processing mechanism of JS function
行为型模式之备忘录模式
代码生成器插件与Creator预制体文件解析
es创建新的索引库并拷贝旧的索引库 实践亲测有效!
Flink's datasource Trilogy 2: built in connector
DC-1靶機
An article takes you to understand CSS pagination examples
What kind of music do you need to make for a complete game?
Will blockchain be the antidote to the global epidemic accelerating the transformation of Internet enterprises?