精华内容
下载资源
问答
  • 这里简要介绍一下是否gdb调试程序的方法:(1)进入gdb调试:gdb + 已经编译通过的可执行程序 -》 就进入调试模式。例如:gdb MiddlePublisher(2)r + 运行时的参数 -》 开始运行可执行程序。例如 r -lxml2 -f refile(3...

    在Linux下调试程序一般用GDB来执行。

    这里简要介绍一下是否gdb调试程序的方法:

    (1)进入gdb调试:

    gdb + 已经编译通过的可执行程序 -》 就进入调试模式。例如:gdb MiddlePublisher

    (2)r + 运行时的参数 -》 开始运行可执行程序。例如 r -lxml2 -f refile

    (3)b + 断点 -》设置调试的断点。两种:一种是:b CMSTask.cpp:200 表示在CMSTask.cpp文件的第200行设置断点。另一种:b TaskManager::buildPubWinTask 表示在执行buildPubWinTask这个函数的时候停止。

    (4)取消断点:

    dis 1 表示取消第一个断点

    dis 2 表示取消第二个断点

    (5)查看设置断点信息: info b

    (6)在断点停止处查看所在代码的详细信息:l

    (7)可以在gdb中直接编译,然后再重新运行时,gdb会直接执行新编译好的可执行程序。例如:直接在gdb下执行make后再重庆运行。

    (8)跟进一个函数:s

    如果设置的断点是在一个函数入口。到达该断点时,键入s就可以进入该函数内部进行调试。如果有多个函数就多次键入S来进入内部的函数。

    PS:

    1、在SecureCRT远程登录界面上开启多个窗口。在窗口之间切换时用:Alt+1,Alt+2.....表示切换到第1个,第2个窗口。

    2、同样在在SecureCRT远程登录界面上要粘贴复制好的内容用:Shift+Insert。

    展开全文
  • gdb调试程序的bug

    2021-08-14 17:51:58
    通过调试一个有问题的程序,熟练使用vi、掌握gcc编译命令、gdb调试命令 通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力 2.实验内容 (1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此...

    1.实验目的

    通过调试一个有问题的程序,熟练使用vi、掌握gcc编译命令、gdb调试命令
    通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力

    2.实验内容

    (1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码原意为输出倒序main函数中定义的字符串,但结果显示没有输出。

    #include<stdio.h>
    int display1(char *string);
    int display2(char *string);
    
    int main()
    {
    	char string[] = "Embedded Linux";
    	display1 (string);
    	display2 (string);
    }
    int display1 (char *string)
    {
    	printf ("The original string is %s \n",string);//%s表示字符串的占位符,display1直接输出string
    }
    int display2 (char *string1)//变量不重名
    {
    	char *string2;/*一个字符型的指针(指针就是内存地址)。所有实际数据类型,不管是整型、浮点型、字符型,
    	还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。
    
        不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。*/
    	int size,i;
    	size = strlen (string1);/*strlen是一个函数,sizeof是一个单目运算符。
    
    strlen 它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)。
    关键字 sizeof 是一个单目运算符,参数可以是数组、指针、类型、对象、函数等
    strlen使用时注意事项:
    
    strlen只能用char*做参数,且必须是以''\0''结尾的。换句话说:strlen只能计算字符串的长度。
    
    sizeof使用时注意事项:
    
    1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。
    如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。*/
    	string2 = (char *) malloc (size + 1);/*如果要存储整个学校的人数时,会出现内存不够用的情况;
    	当我们开辟全校人数大小的数组时,输入一个班人数的大小时,会出现内存浪费的情况。
    为了应对上述问题,我们引入malloc函数。
    malloc是动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址
    malloc函数原型
    extern void *malloc(unsigned int num_bytes);
    意为分配长度为num_bytes字节的内存块
    头文件#include<malloc.h>
    malloc函数返回值
    如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
    
    malloc函数使用注意事项
    malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。
    **(敲黑板)重点:在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。
    在使用malloc函数开辟的空间中,不要进行指针的移动,
    因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配
    使用形式
    malloc只开辟空间,不进行类型检查,只是在使用的时候进行类型的强转。
    mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用
    在使用malloc函数之前我们一定要计算字节数,malloc开辟的是用户所需求的字节数大小的空间。
    如果多次申请空间那么系统是如何做到空间的不重复使用呢?
    在使用malloc开辟一段空间之后,系统会在这段空间之前做一个标记(0或1),
    当malloc函数开辟空间如果遇到标记为0就在此开辟,如果为1说明此空间正在被使用。
    free函数
    作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间。
    注意:使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。
    free函数在释放空间之后,把内存前的标志变为0,且为了防止数据泄露,它会把所释放的空间用cd进行填充。
    */
    	for (i = 0; i < size; i++)
    	{
    		string2[size - i] = string1[i];/*在for循环的作用下,string1的头依次复制给string2的尾
    		string1的第一个给string2的最后一个,以此*/
    	}
    	string2[size+1] = ' ';//在string2的尾加个空字符
    	printf("The string afterward is %s\n",string2);
    }
    

    (2)用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试,该选项含义为“在可执行程序中包含标准调试信息”
    (3)运行生成的可执行文件,观察运行结果
    (4)使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。
    (5)纠正错误,更改源程序并得到正确的结果。

    3.实验步骤

    (1)在工作目录上新建文件greet.c,并用vi启动:vi greet.c
    (2)在vi中输入以上代码
    (3)在vi中保存并退出,使用命令“:wq”
    (4)用gcc编译:gcc -g greet.c -o greet
    (5)运行greet,使用命令“./greet”,输出为:
    The original string is Embedded Linux
    The string afterward is
    可见,该程序没有能够倒序输出
    (6)启动gdb调试:gdb greet
    (7)查看源代码,使用命令“l”
    (8)在30行处(for循环处)设置断点,使用命令“b 30”
    (9)在33行处(printf函数处)设置断点,使用命令“b 33”
    (10)查看断点设置情况,使用命令“info b”
    (11)运行代码,使用命令“r”
    (12)单步运行代码,使用命令“n”
    (13)查看暂停点变量值,使用命令“p string2[size - i]”
    (14)继续单步运行代码数次,并检查string2[size-i]的值是否正确
    (15)继续程序的运行,使用命令“c”
    (16)程序在printf前停止运行,此时依次查看string2[0]、string2[1]。。。,发现string2[0]没有被正确赋值,而后面的赋值都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size-i”,这样string2[0]就永远不能被赋值而保持NULL,故不能输出任何结果
    (17)退出gdb,使用命令“q”
    (18)重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size - i - 1] = string1[i];”即可
    (19)使用gcc重新编译: gcc -g greet.c -o greet
    (20)查看运行结果:./greet
    The original string is Embedded Linux
    The string afterward is xuniL deddedbmE
    这时,输出结果正确

    4.实验结果

    将原来有错的程序经过gdb调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果

    以上是教材内容,下面我们动手操作一下


    有waining:
    没有include相应的头文件
    strlen <string.h>
    malloc <stdlib.h>
    赋值类型和变量类型不一
    为什么gcc给出的是warning,而不是error?个人猜测是gcc会自动寻找.
    在这里插入图片描述
    source file is more recent than executable
    你的源文件已经被修改了, 但正在运行的程序是基于一个较早版本的源代码. 可能会导致gdb调试运行与现有源代码逻辑不一致
    奇怪的warning,我只是写入代码,并未做修改,难道touch命令建的文件自带代码?如果是这样,我不可能有正确的运行结果,它应该是系统自生成的一堆乱码。不懂,忽略,也没人说这个。
    l命令一次只显示10行,需要按enter重复执行该命令以看到全部代码,且行号与书中不对应
    代码有错,行号不对应,可见之捞,由不同的人拼凑,且编著组没人读一遍
    在这里插入图片描述
    如图:n不能运行代码,只能看断点处代码

    在这里插入图片描述
    c继续运行,看到断点信息;p查看变量值
    在这里插入图片描述
    修改代码,结果正确

    展开全文
  • 2010-05-30 回答默认情况下,vs.net是调试.net程序的,但vs.net ide也能编写asp程序,但要调试asp程序,则要进行一定的设置才能进行。vs.net ide不提供asp项目,asp程序只可作为文件的方式建立,所以,无法直接建立...

    2010-05-30 回答

    默认情况下,vs.net是调试.net程序的,但vs.net ide也能编写asp程序,但要调试asp程序,则要进行一定的设置才能进行。

    vs.net ide不提供asp项目,asp程序只可作为文件的方式建立,所以,无法直接建立asp项目进行编辑调试。但可通过以下方式来实现:

    1、新建一个空白解决方案,并保存;

    2、建立一个虚拟目录,并在当前解决方案下新建一个vb空web项目;

    3、选择[新建]-[文件],在类别中选择[脚本],选择active server page项,建立一个asp页面,并保存到解决方案目录下;

    4、选择web项目,右键选择添加现有项,选择上步建立的asp文件;这时asp文件就出现在解决方案资源管理器中了。但这时只能“开始执行(不调试)”,如果直接按f5启动,则会提示以下错误:

    试图运行项目时:无法在web服务器上启动调试。未将项目配置为进行调试。

    有关更多信息,请单击"帮助"。

    5、在解决方案资源管理器中选择vb web项目,右击选择属性。选择[配置属性]-[调试],在启用一栏,去掉asp.net调试(d)的选框,并选中asp调试(b)。

    6、经过以上设置便可达到利用vs.net编辑调试asp程序的目的,经测试,可以设置断点。

    在我所遇到的无法调试的情况下,一般用下面的方法可以解决:

    1:确认在“配置属性”中的“启用asp.net调试"为"true"

    2:确认你的"web.config"中的"debug=true"

    3:若你安装过wind2000 sp4后,则要在命令行执行"regsvr32 i aspnet_isap.dll"

    4:在iis里查看站点信息,选中"目录安全性",里面有"匿名访问和身份验证控制",再点击"编辑..",确认"集成windows身份验证"选项被选中

    5:在ie选项->"安全设置"->"自定义级别"里有"用户验",确认选中"自动使用当前用户名和密码登录"

    6:运行c:\winnt\microsoft.net\framework\v1.0.3705\aspnet_regiis.exe -i

    7:控制面板--管理工具--计算机管理--本地用户和组--用户,双击aspnet用户,为其隶属于添加administrators用户

    以上操作最管用的就是第5步和第7步。

    如果出现下面的错误信息:

    “无法在web服务器上启动调试,未将项目配置为进行调试”.,

    一般估计是把项目直接拷过来打开,要重新配置一下iis

    控制面板-〉internet服务管理器-〉默认的web站点-〉你的项目目录-〉属性-〉应用程序设置-〉应用程序名-〉“创建”

    展开全文
  • (前排提示:VS2017在启动选项中可以看到"附加到Unity调试程序",但是在VS2019中需要到"调试(D)-附加到Unity调试程序") 首先打开VS-工具(T)-获取工具和功能 选中Unity开发组件安装 打开Unity3D - EDit - preferences ...

    (前排提示:VS2017在启动选项中可以看到"附加到Unity调试程序",但是在VS2019中需要到"调试(D)-附加到Unity调试程序")

    首先打开VS-工具(T)-获取工具和功能
    在这里插入图片描述
    选中Unity开发组件安装
    在这里插入图片描述

    打开Unity3D - EDit - preferences - External Tools - 选中Editor Attaching

    在这里插入图片描述
    在Vs中打开要调试的程序,调试 - 附加到Unity调试程序,然后再Unity中运行,这样就可以调试你的程序啦。(注:我用的是vs2019,2019以前的版本在启动项中可以选择附加到Unity调试程序)
    在这里插入图片描述

    展开全文
  • VS2019远程调试VS远程调试应用场景远程调试程序下载安装启动远程调试程序远程调试*此处需要注意本机电脑与远程调试的电脑必须在同一个网络的同一个网段内,否则是选不到的连接目标电脑的,应该是可以跨网段甚至是外...
  • 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮...
  • 问题描述:Linux下使用GDB调试程序问题解决:(1)生成调试文件 注:使用命令 gdb IOStream.c -o IOStream -g最后一个参数是生成gdb调试文件的参数信息(必不可少,否则生成的是可执行的文件)。上述出现如上的警告信息...
  • 文章目录环境要求创建新项目配置连接器Linux安装远程调试编写并调试Linux程序编写Linux多线程程序VS 2019安装 :https://blog..net/ZYZMZM_/article/details/89045810首先在安装时我们需要选择 “使用 C++ 的 Linux ...
  • VS2019如何调试C语言程序 在我们编写代码的时候我们经常是遇到与答案不符啊,数组越界啊等问题,有的时候我们的错误在一些不显眼的地方,我们发现不了,但是我们可以确定是那一部分出现了错误,这个时候我就需要去...
  • VS 2017 调试程序

    2021-10-08 17:04:34
    使用断点,可以告知调试器在某个特定的点上暂时挂起程序的执行。此时,程序的运行处于中断模式。这种模式并不是终止或结束程序的执行,而是在任何时候都能根据调试情况确定是否需要继续执行。  在中断模式下,...
  • VS调试办法 1.打印(Debug) 2.断点(包括条件和操作) 3.逐句 4.监视
  • Dev C++调试程序方法详解

    千次阅读 2021-12-04 18:13:28
    分享一篇站长的关于调试的文章:Dev C++调试程序方法详解 Dev C++算是兼容性很好使用很方便的IDE了,记录一下调试方法,以备不时之需。...本节,我们以一段完整的 C 语言程序为例,系统地学一下如何 Dev C++ 调试程序
  • VScode调试中出现“*没有可用的调试程序,无法发送‘variables’“问题 在node调试js的时候,是否遇到过这样的问题? 当我第一次遇到这样的问题,我以为vscode调试只是捕捉node.js控制台的消息,不能像浏览器...
  • 内网里两台电脑联调:接口程序、服务程序
  • 1. 打印数据调试程序 单纯的加一句输出打印语句其实不太合理,若此语句出了问题可能会影响程序的执行 //在Release下,下方语句将被屏蔽,不会编译 //仅在Debug下会执行 #ifdef _DEBUG if(i==5) printf("..."); #...
  • vs调试详解(一)(小白教程)

    千次阅读 2021-01-06 19:00:34
    Debug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序. Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用. 首先创建一个新...
  • 用VS2019在release模式下调试程序时,发现不能单步,会跳过某几行,最后发现是程序属性中优化设置的问题。 这里只有选择“已禁用(/od)”时才会单步调试每条语句,debug模式下默认是“已禁用(/od)”。 参考如何...
  • 下面我就介绍 一下使用android手机来调试android应用程序所需要的步骤:(典型的Hello World程序)1、手机通过数据线连接在电脑上2、设置android手机为USB调试模式。步骤:menu—> 设置 —> 应用程序 —> 开....
  • 当遇到程序有逻辑错误时,最好的解决方法就是对程序进行调试,即通过观察程序的运行过程,以及运行过程中变量(局部变量和全局变量)值的变化,可以快速找到引起运行结果异常的根本原因,从而解决逻辑错误。...
  • 通常,我们在调试程序的都会使用printf。在Android中,我们会去使用logcat,现在,给大家介绍一种常用的调试方法,debug写文件调试法。在Android系统中,调试一个C应用程序可谓是极其不方便,为了保存log的完整性,...
  • VS中发布并调试IIS程序(非附加进程!!!)筒子们,你们不觉得发布到IIS再...在vscode中怎样debug调试go程序随着互联网时代的飞速发展,我们编码使用的开发利器也在不断更新换代,古话说工欲善其事必先利其器,对于Jav...
  • 例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序。其他情况包括:运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),或者开发人员想要将...
  • pythonprint调试程序

    2021-10-07 12:21:18
    使用复杂繁琐的断点不同,使用print语句可以在你想要的任何地方进行显示和调试,而且编译后不会影响程序运行。 这里print可以检验是否成功读取。 往往在这些数据库读取语句都会出现错误,在读取后进行print可以...
  • IDE 使用 Sun Microsystems JPDA 调试器来调试程序。在启动调试会话时,所有相关的调试器窗口都将自动出现在屏幕的底部。您可以调试整个项目、任何可执行类以及任何 JUnit 测试。IDE 还允许您通过将调试器...
  • VSCode调试ROS程序

    2021-05-12 21:48:49
    vscode打开ros的工作空间 按下ctrl+shift+p,输入tasks:configure task 选择Tasks:Configure Task 选择catkin_make:build 现在按下ctrl+shift+B即可运行catkin_make 3、运行ROS (1) 运行roscore 按下ctrl+p输入...
  • 前面章节介绍了如何使用 IDLE 自身的调试工具调试程序,除此之外,Python 还提供了 assert 语句,也可以用来调试程序。 《Python assert断言)》一节中,已经对 assert 的基本用法做了简单介绍,assert 语句的完整...
  • 使用windbg调试程序

    2021-10-08 16:34:45
    使用WinDbg调试程序 - gmplayer - 博客园
  • 解决办法:
  • vs安装了 “使用C++的Linux开发” 组件 步骤一:vs安装了 “使用C++的Linux开发” 组件 通过控制面板->程序和功能->Visual Studio右键更改->勾选 “使用C++的Linux开发” 组件安装 步骤二:通过CMake...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,079,714
精华内容 431,885
关键字:

如何用vs调试程序