程序调试

使用gdb调试应用程序segment fault

孤街浪徒 提交于 2020-01-06 19:35:26
1、在linux系统下打开core dump功能 首先在shell中输入ulimit –a确认core大小 上图core文件大小为0,表明默认没有coredump信息,这时需要修改系统配置文件。 如果不为 0 就跳过下面配置步骤。 修改 /etc/security/limits.conf 文件,增加core文件大小 在里面添加一行 这样就配置好了core大小。 2、运行gdb确认程序出错位置 下面以我自己写的一个程序为例,我在eclipse下新建了一个工程,应用程序内容如下: 图中标红的位置标明程序执行到这里会出错。 编译后在debug目录下能看到可执行程序。 然后在shell中执行会发现报段错误,此时在当前目录下产生了coredump文件 使用gdb查看coredump信息就能确定异常位置。 就能确定程序是在第20行出错了。 来源: CSDN 作者: Felven 链接: https://blog.csdn.net/jj12345jj198999/article/details/103846429

Rocketmq源码下载与调试

我们两清 提交于 2020-01-06 16:15:00
Rocketmq源码编译运行 下载 从 github 下载源码,比较慢,也可以从 gitee 下载 源码目录结构 名称 作用 broker broker模块:c和p端消息存储逻辑 client 客户端api:produce、consumer端 接受与发送api common 公共组件:常量、基类、数据结构 tools 运维tools:命令行工具模块 store 存储模块:消息、索引、commitlog存储 namesrv 服务管理模块:服务注册topic等信息存储 remoting 远程通讯模块:netty+fastjson logappender 日志适配模块 example Demo列子 filtersrv 消息过滤器模块 srvutil 辅助模块 filter 过滤模块:消息过滤模块 distribution 部署、运维相关zip包中的代码 openmessaging 兼容openmessaging分布式消息模块 编译 解压导入idea ,修改配置文件pom.xml,jdk编译版本为1.8 # 编译 mvn -Prelease-all -DskipTests clean install -U 启动namesrv 进入org.apache.rocketmq.namesrv.NamesrvStartup,执行main方法 会抛出错误, 原因是没有设置配置ROCKETMQ

本地idea调试spark2.x程序

五迷三道 提交于 2020-01-06 02:31:33
1.构建使用idea 构建maven 项目 选择org.scala-tools.archetypes:scala-archetype-simple,然后一直点next,maven最好选中本地配置国内源的而不适用idea自生的。 工程创建好后,点击Event Log 修改pox.xml文件(设置scala的版本默认创建为2.7.0的) Error:scalac: error while loading JUnit4, Scala signature JUnit4 has wrong version expected: 5.0 found: 4.1 in JUnit4.class 上述问题解决方法 1.治标不治本 直接注释test目录下报错的代码即可 2.根治方法(试了下但没成功) 点击file->Settings->Plugins 搜索junit,按下图安装好后重启idea即可 2.添加spark程序所依赖的jar包 (修改pom.xm用maven添加的不知道为什么不能运行) 点击file->Project Setting->Libaries添加jar包 jar包来源:spark官网下载下载编译过的安装包(如下图类型的) 把安装包中的jars目录中的jar全部添加到工程中(可根据自己需求添加) 添加完后编写spark应用程序设置为本地模式便可以在idea上直接运行调试 来源:

Fiddler命令行和HTTP断点调试

大憨熊 提交于 2020-01-05 07:36:52
一. Fiddler内置命令。 上一节( 使用Fiddler进行抓包分析 )中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都成为一个session)界面中可以看到Fiddler抓取的所有HTTP请求.而为了更加方便的管理所有的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作 Linux 的童鞋应该可以感受到这会有多么方便).输入命令的位置在web session管理面板的下方(通过快捷键alt+q可以focus到命令行). Fiddler内置的命令有如下几种: 1. select命令。 选择所有相应类型(指content-type)为指定类型的HTTP请求,如选择图片,使用命令select image.而select css则可以选择所有相应类型为css的请求,select html则选择所有响应为HTML的请求(怎么样,是不是跟SQL语句很像?)。如图是执行select image之后的结果: 2. allbut命令。 allbut命令用于选择所有响应类型不是给定类型的HTTP请求。如allbut image用于选择所有相应类型不是图片的session(HTTP请求),该命令还有一个别名keeponly.需要注意的是

Debug与Release版本的区别

房东的猫 提交于 2020-01-05 02:33:35
  Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。   Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于 ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release版本需要MFC42.DLL支持。Release不对源代码进行调试,不考虑MFC的诊断宏,使用的是 MFC Release库,编译时对应用程序的速度进行优化,而Debug则正好相反,它允许对源代码进行调试,可以定义和使用MFC的 诊断宏,采用MFC Debug库,对速度没有优化。   既然Debug和 Release仅仅是编译选项的不同,那么为什么要区分Debug和Release版本呢?   Debug和Release,在我看来主要是针对其面 向的目标不同的而进行区分的。Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息

GDB调试器(调试程序/进程/线程)

爷,独闯天下 提交于 2020-01-04 21:22:42
程序调试 (1)断点设置 A.设置断点 (GDB) break <函数名> or b <函数名>:对当前正在执行的文件中的指定函数设置断点。 (GDB) break <行号> or b <行号>:对当前正在执行的文件中的特定行设置断点。 (GDB) break <文件名:行号> or b <文件名:行号>:对指定文件的指定行设置断点。最常用的设置断点方式。 (GDB) break <文件名:函数名> or b <文件名:函数名>:对指定文件的指定函数设置断点。 (GDB) break <+/-偏移量>:当前指令行+/-偏移量出设置断点。 or b <+/-偏移量> (GDB) break <*地址>:指定地址处设置断点。or:b <*地址> B.查看、删除断点 (GDB) info break :显示所有断点以及监视点。or:(GDB) i b (GDB) delete <编号>:删除编号指向的断点或者监视点。or d <编号> (GDB) clear <行号>:删除该行的断点。 (GDB) clear <文件名:行号>:删除改行的断点。 C.设置无效、有效断点 (GDB) disable <断点编号> : 当前断点设置为无效。 (GDB) enable <断点编号>:当前断点设置为有效。 (2).监视点 可以监视某个变量,在变量被访问或者被修改时程序会在当前点进入断点。删除

VS2008下编写调试dll的一个实例(参考msdn) .

廉价感情. 提交于 2020-01-04 21:13:19
演练:创建和使用动态链接库 在本演练中,您将创建一个动态链接库 (DLL),其中包含可供其他应用程序使用的有用例程。使用 DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练使用本机 C++。有关使用本机 C++ 创建静态库的演练,请参见 演练:创建和使用静态库 。有关使用面向公共语言运行库的 Visual C++ 的演练,请参见 演练:创建和使用托管程序集 。 本演练涵盖以下内容: 创建新的动态链接库 (DLL) 项目 向动态链接库添加类 创建引用动态链接库的应用程序 在控制台应用程序中使用类库的功能 运行应用程序 先决条件 本主题假定您具备 C++ 语言的基础知识。 创建新的动态链接库 (DLL) 项目 从“文件”菜单中,选择“新建”,然后选择“项目…”。 从“项目类型”窗格中选择“Visual C++”下的“Win32”。 从“模板”窗格中,选择“Win32 控制台应用程序”。 为项目选择一个名称,如 “MathFuncsDll” ,并将其输入“名称”字段。为解决方案选择一个名称,如 “DynamicLibrary” ,并将其输入“解决方案名称”字段。 按“确定”启动 Win32 应用程序向导。在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。 从“Win32

GDB调试指南-单步调试

醉酒当歌 提交于 2020-01-04 00:12:02
前言 前面通过《 启动调试 》,《 断点设置 》,《 变量查看 》,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容。在启动调试设置断点观察之后,没有我们想要的信息怎么办呢?这个时候,就需要单步执行或者跳过当前断点继续执行等等。而本文所说的单步调试并非仅仅指单步执行,而是指在你的控制之下,按要求执行语句。 准备 老规矩,先准备一个示例程序如下: 12345678910111213141516171819202122232425262728293031 /*计算简单乘法,这里没有考虑溢出*/int (int a, int b){ int c = a + b; return c;}/*打印从0到num-1的数*/int count(int num){ int i = 0; if(0 > num) return 0; while(i < num) { printf("%dn",i); i++; } return i;}int main(void){ int a = 3; int b = 7; printf("it will calc a + bn"); int c = add(a,b); printf("%d + %d = %dn",a,b,c); count(c); return 0;} 编译: 1 gcc -g -o

如何在调试状态下部署局域网网站

℡╲_俬逩灬. 提交于 2020-01-03 11:29:10
1背景介绍   最近有开发数据统计的网站,老板需及时投放到显示屏,但程序仍需改动,只能先部署到局域网,测试产品不能部署服务器(服务器负担过重) 开发框架MVC4+sql server+echarts,由于需每隔5分钟刷新,还有ajax,手写ajax+echarts调用生成图表,话不多说,上图。 2 部署过程 a 从网上找资料结合之前的认知,做IIS配置 如图所示站点名称,物理路径,端口可取几万,保准被占用 b 配置完成后,本地都无法访问,结合网上资料才知道端口被防火墙允许,且还有后续配置未完成。 c 调试配置 打开IIS express 选择需配置网站,打开配置 d 配置端口+IP e 防火墙端口 至此配置完成,可在局域网内访问,丝毫不影响调试。 3 小结 echart使用需加强,网站部署需进一步了解。 多动手操作,积累经验。 来源: https://www.cnblogs.com/arvinzd/archive/2020/01/03/12143700.html

调试Mono源码分析Hello World的执行

南笙酒味 提交于 2020-01-03 10:20:23
本文目的很简单,简单分析一下下面语句是如何被Mono Runtime执行的: public class Hello1 { public static void Main() { System.Console.WriteLine("Hello, World!"); } } 由于自己也是刚接触Mono源码,以前一直停留于简单的应用之上,所以本文的分析不全面,只是为了能大致的了解Mono的执行流程,对基本的函数和流程有所了解,所以本文的风格为流水帐。 一、先简单的看下Mono源码的目录中的几个重要文件夹: 我这里使用的是不知道什么时候下载的某个历史版本2.6.7,目前我觉得重要的就3个文件夹,mcs为base framework这里除了常见的System namespace下的各种重要程序集之外还有以Mono作为namespace的一些程序集,听 雨痕 说玩Mono不能错过这些程序集,有空看下;libgc文件夹里貌似是提供GC的支持库;最重要一个文件夹就是mono了,下面着重看下这个目录,这里实现的是Mono Runtime,本文调试的代码也主要是这里的。 1.arch:此目录放了各种不同处理器的差异代码,看下x86里面就两个文件x86-codegen.h和tramp.c,这个tramp.c通过调用x86-codegen.h里的各种奇怪的宏提供了两个方法mono_arch_create