调试_调试什么意思 - CSDN
  • 如何调试代码

    2018-02-22 15:54:45
    近几日老哥在家指导着写了挺多代码,调试代码作为一个必经的过程也有了更深刻的了解。借这篇博客整理一下。(下文举例编程软件为VS) 调试bug最好用的是打断点。大一学习时并没有在意过断点的用法,每次调代码都是...

    近几日老哥在家指导着写了挺多代码,调试代码作为一个必经的过程也有了更深刻的了解。借这篇博客整理一下。(下文举例编程软件为VS)

    调试bug最好用的是打断点。大一学习时并没有在意过断点的用法,每次调代码都是直接正面刚,肉眼找错误,直到寒假才真正熟练掌握了断点的使用方法(捂脸)。在某处语句前打上断点,调试时便会在这里停止。下面举一个简单的例子:
    代码
    在第7行打上断点后,调试时程序会执行到while之前。一方面可以检测一下whlie语句之前是否有错误,另一方面可以通过逐步执行观察各个变量的数值变化。
    逐步执行
    下面可以显示出变量的监测窗口,方便实时对照
    变量
    逐步执行定位问题是很简单的一种途径。

    注释掉部分语句也是定位问题的一种方式。不过适用于整块函数。

    展开全文
  • VS调试技巧

    2018-08-25 17:16:06
    VS调试中经常使用断点、堆栈窗口,很少使用监视、快速监视窗口和即时命令窗口。查找了相关资料后发现监视窗口在某些情况下还是很有用的,所以针对上述窗口大体总结了一下; 1.添加监视变量 程序执行过程中命中断点...

    VS调试中经常使用断点、堆栈窗口,很少使用监视、快速监视窗口和即时命令窗口。查找了相关资料后发现监视窗口在某些情况下还是很有用的,所以针对上述窗口大体总结了一下;
    1.添加监视变量
    程序执行过程中命中断点后,
    a. 在变量名称位置单击右键,”添加监视”;
    b. 将变量选中,拖动 到监视窗口;
    c. 在监视列表中双击,编辑要监视的变量名称;
    2. 监视中查看、修改变量当前值
    a. 若监视的变量为数值,则可选择数值展示的进制格式:1) 单击右键,选择”以x进制展示”; 1) 通过”变量名称,格式字符”的方式切换展示方式,如下图。图中a变量的当前值为0xabc,”a,d”是以十进制方式展示;”a,x”是以十六进制小写展示。vs支持多种格式字符,详细说明见如下链接:
    https://msdn.microsoft.com/zh-cn/library/75w45ekt.aspx
    数值格式化显式
    b. 双击变量值,可做编辑修改,修改后的变量如图标红高亮显式。MSDN上对于标红高亮的解释如下:

    为什么在“局部变量”窗口和“自动”窗口中变量值有时是红色的?
    你可能注意到,在“局部变量”和“自动”窗口中一个变量的值有时是红色的。 这些是自上次评估以来更改过的变量值。 此更改可能是在上一次调试会话中进行的,或者是因为在窗口中更改了该值。

    3.计算表达式的值
    在监视窗口中可对当前作用域中的可见变量计算相关表达式的值:
    a. 变量加减或取址
    这里写图片描述
    b.函数或接口调用
    接口调用时,值这一列对应为函数调用的返回值,若无返回值则为void
    这里写图片描述
    c.查看地址对应的符号信息
    调试中需要查看某些地址位置对应的符号,可以添加到监视窗口,默认地址值以数值方式展示。若明确知道该地址为某一类型变量的地址,则可以将对地址做强制地址转换,输入如下表达式:(CSomeType*)0x000aefee。然后就可以看到该地址对应内存中的内容。若不知道其实际类型,可尝试使用”void*”做强制转换以明确告诉调试器,该值为内存地址值,调试器会尝试做符号解析。测试中发现void*强转仅对编译期生成的静态符号,如函数,静态变量等能够准确匹配,堆或栈上分配的数据变量无法匹配(静态变量定义后需要有访问、使用,否则编译器会将其优化掉,导致监视时找不到该变量)。如下图:
    这里写图片描述
    另外,对于监视窗口的使用,CodeProject有篇文章总结的很好,推荐读一下:

    https://www.codeproject.com/articles/121623/10-tips-you-should-know-about-watch-window-while-d

    展开全文
  • 手机打开调试模式的方法 尽量放在页面头部,底部有可能不行 <script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script> // init vConsole var vConsole = new ...

    手机打开调试模式的方法
    尽量放在页面头部,底部有可能不行

    <script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script>
    <script>
      // init vConsole
      var vConsole = new VConsole();
      console.log('Hello world');
    </script>
     
    
    展开全文
  • 当年写 .net framework的项目,部署在iis以及用vs附加到进程来调试的时候,都非常方便,普通开发者都很熟悉。 但对于 .net core项目,用iis部署与原来不同了,附加到进程也与原来不同了。 这点不要纠结了,就是这样...

    特别说明一下,
    当年写 .net framework的项目,部署在iis以及用vs附加到进程来调试的时候,都非常方便,普通开发者都很熟悉。
    但对于 .net core项目,用iis部署与原来不同了,附加到进程也与原来不同了。
    这点不要纠结了,就是这样的了,已经尝试很多次了。

    操作 .net frameword .net core
    部署到iis 直接把iis中的网站地址指向到项目地址即可 原来的方式不行了,需publish发布到另一地方去,然后把iis网站地址指向到此,见图1
    附加到进程调试 直接附加到进程,无需多言 1.需要publish的时候的是debug版本 2.附加到进程,选择dotnet搜索出来,见图 2

    在这里插入图片描述
    在这里插入图片描述

    本想自己写一篇,现在看来完全不必了。

    Debugging ASP.NET Core applications running in IIS


    以上亲测成功。
    windows 10 64 bit
    vs 2017
    .net core 2.1 webapi项目
    iis 10.0


    @2020年7月4日
    现在看来,有必要留存一份,因为StackOverflow有时候慢得令人捉急。
    在这里插入图片描述


    另外一种方式(更方便)

    按照:

    https://www.cnblogs.com/shumin/p/9967854.html

    关键词:Open Command Linedotnet run xxx 以及/k dotnet run

    亲测可行。

    另外,还可以把command的参数设置为 /k dotnet watch run 体验会更好。

    展开全文
  • 用GDB调试程序(一)

    2003-07-02 00:03:00
    用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比...

    用GDB调试程序

    GDB概述
    ————

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

    一般来说,GDB主要帮忙你完成下面四个方面的功能:

        1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
        2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
        3、当程序被停住时,可以检查此时你的程序中所发生的事。
        4、动态的改变你程序的执行环境。

    从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。


    一个调试示例
    ——————

    源程序:tst.c

         1 #include <stdio.h>
         2
         3 int func(int n)
         4 {
         5         int sum=0,i;
         6         for(i=0; i<n; i++)
         7         {
         8                 sum+=i;
         9         }
        10         return sum;
        11 }
        12
        13
        14 main()
        15 {
        16         int i;
        17         long result = 0;
        18         for(i=1; i<=100; i++)
        19         {
        20                 result += i;
        21         }
        22
        23        printf("result[1-100] = %d /n", result );
        24        printf("result[1-250] = %d /n", func(250) );
        25 }

    编译生成执行文件:(Linux下)
        hchen/test> cc -g tst.c -o tst

    使用GDB调试:

    hchen/test> gdb tst  <---------- 启动GDB
    GNU gdb 5.1.1
    Copyright 2002 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-suse-linux"...
    (gdb) l     <-------------------- l命令相当于list,从第一行开始例出原码。
    1        #include <stdio.h>
    2
    3        int func(int n)
    4        {
    5                int sum=0,i;
    6                for(i=0; i<n; i++)
    7                {
    8                        sum+=i;
    9                }
    10               return sum;
    (gdb)       <-------------------- 直接回车表示,重复上一次命令
    11       }
    12
    13
    14       main()
    15       {
    16               int i;
    17               long result = 0;
    18               for(i=1; i<=100; i++)
    19               {
    20                       result += i;   
    (gdb) break 16    <-------------------- 设置断点,在源程序第16行处。
    Breakpoint 1 at 0x8048496: file tst.c, line 16.
    (gdb) break func  <-------------------- 设置断点,在函数func()入口处。
    Breakpoint 2 at 0x8048456: file tst.c, line 5.
    (gdb) info break  <-------------------- 查看断点信息。
    Num Type           Disp Enb Address    What
    1   breakpoint     keep y   0x08048496 in main at tst.c:16
    2   breakpoint     keep y   0x08048456 in func at tst.c:5
    (gdb) r           <--------------------- 运行程序,run命令简写
    Starting program: /home/hchen/test/tst

    Breakpoint 1, main () at tst.c:17    <---------- 在断点处停住。
    17               long result = 0;
    (gdb) n          <--------------------- 单条语句执行,next命令简写。
    18               for(i=1; i<=100; i++)
    (gdb) n
    20                       result += i;
    (gdb) n
    18               for(i=1; i<=100; i++)
    (gdb) n
    20                       result += i;
    (gdb) c          <--------------------- 继续运行程序,continue命令简写。
    Continuing.
    result[1-100] = 5050       <----------程序输出。

    Breakpoint 2, func (n=250) at tst.c:5
    5                int sum=0,i;
    (gdb) n
    6                for(i=1; i<=n; i++)
    (gdb) p i        <--------------------- 打印变量i的值,print命令简写。
    $1 = 134513808
    (gdb) n
    8                        sum+=i;
    (gdb) n
    6                for(i=1; i<=n; i++)
    (gdb) p sum
    $2 = 1
    (gdb) n
    8                        sum+=i;
    (gdb) p i
    $3 = 2
    (gdb) n
    6                for(i=1; i<=n; i++)
    (gdb) p sum
    $4 = 3
    (gdb) bt        <--------------------- 查看函数堆栈。
    #0  func (n=250) at tst.c:5
    #1  0x080484e4 in main () at tst.c:24
    #2  0x400409ed in __libc_start_main () from /lib/libc.so.6
    (gdb) finish    <--------------------- 退出函数。
    Run till exit from #0  func (n=250) at tst.c:5
    0x080484e4 in main () at tst.c:24
    24              printf("result[1-250] = %d /n", func(250) );
    Value returned is $6 = 31375
    (gdb) c     <--------------------- 继续运行。
    Continuing.
    result[1-250] = 31375    <----------程序输出。

    Program exited with code 027. <--------程序退出,调试结束。
    (gdb) q     <--------------------- 退出gdb。
    hchen/test>

    好了,有了以上的感性认识,还是让我们来系统地认识一下gdb吧。

     


    使用GDB
    ————

    一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

        > cc -g hello.c -o hello
        > g++ -g hello.cpp -o hello

    如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

    启动GDB的方法有以下几种:

        1、gdb <program>
           program也就是你的执行文件,一般在当然目录下。

        2、gdb <program> core
           用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

        3、gdb <program> <PID>
           如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

     

    GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只例举一些比较常用的参数:

        -symbols <file>
        -s <file>
        从指定文件中读取符号表。

        -se file
        从指定文件中读取符号表信息,并把他用在可执行文件中。

        -core <file>
        -c <file>
        调试时core dump的core文件。

        -directory <directory>
        -d <directory>
        加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

    下一页->

    (版权所有,转载时请注明作者和出处) 

    展开全文
  • 近几年,浏览器厂商也纷纷推出自己的远程调试(RemoteDebugging)工具,比如Opera Mobile 可以借助其推出的跨设备跨平台桌面开发者工具Opera Dragonfly 实现远程调试,iOS Safari 可以开启Web检查器在 Mac OS X系统中...
  • C语言调试

    2016-05-10 07:33:40
    1.调试的概念以及调试器的选择 在编写代码的过程中,相信大家肯定遇到过这样的情况:代码能够编译通过,没有语法错误,但是运行结果却不对,反复检查了很多遍,依然不知道哪里出了问题。这个时候,就需要调试程序了...
  • 设置在Release模式下调试的方法: 1.工程项目上右键 -> 属性 2.c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) ...4.连接器 -〉调试 -〉生成调试信息 选 是 (/DEBUG)
  • 调试在程序编程中起到很重要的地位,调试可以帮助程序员解决很多问题。但是在编写程序前,要对需要编写的程序有自己的思路,何时需要有用的变量以及常量,这都是需要思考的。...
  • 调试(Debug)   软件调试是在进行了成功的测试之后才开始的工作,它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。   注: 以问题为中心 以错误为导向   调试活动由两部分组成: u ...
  • 1.为什么要进行程序调试调试程序的目的? 程序调试是将编制的程序投入实际运行前,用手工或 编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。 测试时程序...
  • 详解反调试技术

    2017-02-04 16:30:10
    调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当...
  • web项目调试

    2018-08-15 15:43:33
    web项目往往由前端和后台组成,涉及的内容和知识特别多,初学者由于对其运行机制理解不到位,同时没有掌握恰当的调试方法,当项目出现问题时就比较茫然、无从下手。提高调试能力对于程序员来讲是至关重要,是成为一...
  • PyCharm 作为IDE,断点调试是必须有的功能。否则,我们还真不如用纯编辑器写的快。 【运行】和【调试】前的设置,详见前面的文章,helloword。 1,设置断点 在代码前面,行号的后面,鼠标单击,就可以设置...
  • 将程序发布到自己本机IIS里,我们进行内部测试,难免会出现bug,可以通过vs进行调试。 步骤:“调试”》=“附加到进程”,如下界面: 找到进程名称为w3wp.exe,如果没有显示,则勾选显示所有用户的进程即可,会有多...
  • 目前有许多免费的串口调试工具,比较常用的有:1、友善串口调试助手(v2.6.5)优点: 1)使用方便,不丢包; 2)串口自动识别,支持COM9以上串口; 3)支持多串口调试; 4)支持历史发送记录; 5)广泛支持各种...
  • 微软新出了一个代码编辑器,叫做Visual Studio Code,VS Code只能编辑代码,没有调试等命令,使用惯了编译器,会发现VS Code有点儿无从下手。 VS Code打开如图所示: 调试方式一般有两种: 第一种:可以...
  • 程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。之所以要调试程序,是因为程序的运行结果和预期结果不一致,...
  • 在 linux 系统下进行串口调试或者开发时配合简单易用的串口调试工具那是必不可少。这篇博客对当前用的较多的,且我自己经常用的一些串口工具做一下汇总,大家可以参考一下。 实验环境: OS: Ubuntu16.04 Kernel: ...
  • 内存泄露调试

    2015-08-01 17:33:08
    内存泄露调试(Memory Leak Debug) 一、概述内存泄露产生原因存在多种,但常见分类如下: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2.偶发性内存泄漏。...
1 2 3 4 5 ... 20
收藏数 1,496,552
精华内容 598,620
关键字:

调试