ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Debugger Tool In Action

2021-11-07 18:34:51  阅读:239  来源: 互联网

标签:Debugger int demo Tool gdb will cpp add Action


This Blog will show useful debugger tool

Introduction

Hello every Dear friend.I am wsyingang. In this article,I will show some debug tools.I will written this blog with English,because I does not find a suitable software for typewriting.

Debugger tool for c/c++

As we know ,GDB is the most popular debug tool for c++/c . Now, have a try.

Env info

Operating System:Ubuntu

Demo code

#include<bits/stdc++.h>
using namespace std;
int add(int a,int b){
    cout<<"in add"<<endl;
    int c=a+b;
    int d=a-b;
    return c;
}
int main(){
    int a;
    a=10;
    int b;
    b=11;
    int ans=add(a,b);
    cout<<"ans==="<<ans<<endl;
    int sum=1;
    for(int i=1;i<=10;i++){
        sum+=i;
    }
    cout<<"sum=="<<sum<<endl;
}

Compile Source Code

compile code with g++ compiler,if you have not this tool on your os,you can install like this:

sudo apt install g++
g++ -g -o test demo.cpp 

now,we get the target :test

Start gdb

gdb test

if everything work well,you will get this info:

Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...

Attention the last line,Reading symbols from test.

Some action

List source code

gdb) list
1	#include<bits/stdc++.h>
2	using namespace std;
3	int add(int a,int b){
4	    cout<<"in add"<<endl;
5	    int c=a+b;
6	    int d=a-b;
7	    return c;
8	}
9	int main(){
10	    int a;
(gdb) 

list command will list source code.Maybe you want look the spec function,you can exec command:list func_name
press enter will show you last code,which not appear.

run

runcommand will run this program.For Example

(gdb) run
Starting program: /home/yg/code-repo/gdb-learn/test 
in add
ans===21
sum==56
[Inferior 1 (process 9399) exited normally]
(gdb) 

breakpoint

For debugging breakpoint is very important.You cant set breakpoint with this format:

b line_number

for example

(gdb) b 6
Breakpoint 1 at 0x55555555520e: file demo.cpp, line 6.

Then,run this program

(gdb) run 
Starting program: /home/yg/code-repo/gdb-learn/test 
in add

Breakpoint 1, add (a=10, b=11) at demo.cpp:6
6	    int d=a-b;
(gdb) 

This process will stop at line 6

continue

continue command let process go to next breakpoint.Now we set two breakpoints

(gdb) b 6
Note: breakpoint 1 also set at pc 0x55555555520e.
Breakpoint 2 at 0x55555555520e: file demo.cpp, line 6.
(gdb) b 20
Breakpoint 3 at 0x5555555552a0: file demo.cpp, line 20.

at line 6 and line 20.Then run this program

(gdb) run
Starting program: /home/yg/code-repo/gdb-learn/test 
in add

Breakpoint 1, add (a=10, b=11) at demo.cpp:6
6	    int d=a-b;

Now,It reach first breakpoint,and continue

(gdb) continue
Continuing.
ans===21

Breakpoint 3, main () at demo.cpp:20
20	    cout<<"sum=="<<sum<<endl;

it reach second breakpoint.

print /whatis

When you are debugging,you want watch some variable.You can use print and whatis to detect variable.
For Example

(gdb) run
Starting program: /home/yg/code-repo/gdb-learn/test 
in add

Breakpoint 1, add (a=10, b=11) at demo.cpp:6
6	    int d=a-b;
(gdb) print d
$1 = 21845
(gdb) 

Now,you maybe curious about the value of d.It is a strange value,not equal a-b.In fact at line 6,a break point is alive,so d is not assign value at this time.
step step command will let process exec next step,if next step.
next next command will let process exec next command.

(gdb) next
7	    return c;
(gdb) print d
$4 = -1
(gdb) 

if exec next/step command,then print d ,you will find d is equal to a-b.

backtrace

(gdb) backtrace
#0  add (a=10, b=11) at demo.cpp:7
#1  <function called from gdb>
#2  add (a=10, b=11) at demo.cpp:6
#3  0x0000555555555245 in main () at demo.cpp:14
(gdb) 

this command will show you current stack.

quit

if you want finish debug use quit command.

Summary

gdb is a very useful tool for debugging.This above introduction is only small part.You can find more by yourself

Debugger for Go

If you are go programer,you can use gdb for debugging as well.But there as other options.
delve is a easy-to-use debug tool for golang.

How to Install

you can follow the documentation doc.
If everything work well,you will get the binary executable file,at you $GOPATH/bin
for example

yg@ubuntu:~/go/bin$ ls | grep dlv
dlv
yg@ubuntu:~/go/bin$ 

you can add an soft link for this file like this:

yg@ubuntu:/usr/local/bin$ ln -s ~/go/bin/dlv dlv
yg@ubuntu:/usr/local/bin$ ll
total 8
drwxr-xr-x  2 root root 4096 Nov  7 01:22 ./
drwxr-xr-x 11 root root 4096 Aug 15 00:02 ../
lrwxrwxrwx  1 root root   19 Nov  7 01:22 dlv -> /home/yg/go/bin/dlv*

then you can use dlv at everywhere.

Debugger for Java

JDB

a gdb likely tool for java debug

Arthas

Arthas is a Java Diagnostic tool open sourced by Alibaba.

标签:Debugger,int,demo,Tool,gdb,will,cpp,add,Action
来源: https://blog.csdn.net/weixin_41863129/article/details/121194206

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有