程序调试

Linux下gdb调试生成core文件并调试core文件

混江龙づ霸主 提交于 2020-03-17 07:08:08
1.什么是core文件? 有问题的程序运行后,产生“段错误 (核心已转储)”时生成的具有堆栈信息和调试信息的文件。 编译时需要加 -g 选项使程序生成调试信息: gcc -g core_test.c -o core_test 2.怎样配置生成 core 文件 (1)core文件开关 ①使用 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件; ②使用 ulimit -c [filesize] 设置core文件大小,当最小设置为4之后才会生成core文件; ③使用 ulimit -c unlimited 设置core文件大小为不限制,这是常用的做法; ④如果需要开机就执行,则需要将这句命令写到 /etc/profile 等文件。 (2)core文件命名和保存路径 ①core文件有默认的名称和路径,但为了方便,我们通常会自己命名和指定保存路径; ②可以通过 /proc/sys/kernel/core_pattern 设置 core 文件名和保存路径,方法如下: echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 3.调试core文件 (1)方法1: gdb [exec file] [core file] 然后执行bt看堆栈信息: (2)方法②: gdb -c [core file]

更轻松地调试Windows服务

女生的网名这么多〃 提交于 2020-03-16 17:48:52
某厂面试归来,发现自己落伍了!>>> 是否有更简单的方法来单步执行代码,而不是通过Windows服务控制管理器启动服务,然后将调试器附加到线程? 这有点麻烦,我想知道是否有一个更简单的方法。 #1楼 几周前,当我找到一个新的服务项目时,我找到了这个帖子。 虽然有很多很棒的建议,但我仍然没有找到我想要的解决方案:可以在 OnStop 服务类进行任何修改的情况下调用服务类的 OnStart 和 OnStop 方法。 我提出的解决方案使用 Environment.Interactive 选择运行模式,正如此帖的其他答案所示。 static void Main() { ServiceBase[] servicesToRun; servicesToRun = new ServiceBase[] { new MyService() }; if (Environment.UserInteractive) { RunInteractive(servicesToRun); } else { ServiceBase.Run(servicesToRun); } } RunInteractive 助手使用反射来调用受保护的 OnStart 和 OnStop 方法: static void RunInteractive(ServiceBase[] servicesToRun) { Console

VS2010常用的调试方法

爱⌒轻易说出口 提交于 2020-03-16 12:06:20
1.一直以来都没用过command window, F5以后可以这样用,直接对一个函数,或者变量做模块测试 以下还有一些常用的技巧: 1 悬停鼠标查看表达式值 调试是很有挑战性的。比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等……但是无论哪种情况下,查看表达式和局部变量 的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。一种更简单的方法,把鼠标停在所需查看的数据上。如果是类或结构,那么点击展开可以很方便 快速地查看其字段。 2 在运行过程中改变变量值 调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些 条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。 3 设置下一个运行位置 一个典型的调试案例是我们经常会用逐步调试的方法去分析为什么函数出错了。这时你遇到这个函数调用其他函数返回错误,而这个错误不是你想要的,你该 怎么办?重启调试器?这里有个更好的方法,直接把黄色的运行位置箭头拖到你想要的运行位置。其实就是跳过中间运行代码,直接到想要的位置。很简单吧。 4 编辑然后继续运行 在运行一个很复杂的程序和插件时,发现一个错误,但是不想浪费时间去重编译重启动程序。很简单

Xcode断点调试技巧

霸气de小男生 提交于 2020-03-16 11:46:14
本文转载自 破船 在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部分。通过本文的学习,我们将知道在程序中,可以使用的大多数重要调试功能,并如何利用这些调试功能来帮助你以更少的时间解决bug。 本文将介绍如下内容: 使用控制台检查程序的状态 进行日志记录,并熟练的驾驭NSLog 利用对象的生命周期跟踪内存的使用 使用控制台进行检查 在进行调试程序的时候,可能Xcode底部的小黑框会是你最好的朋友。它能输出日志信息,错误信息以及其它各种有用的内容——这可以帮助你进行错误的跟踪。除了可以在看到日志的输出,我们还可以在某个断点出停留住,并检查程序中的变量信息。 带条件的断点 本文假设你以及知道断点是如何工作的了(即使不知道的话,也不用担心,看完本文之后,你将明白!)。 在某个特定的时间点命中断点是非常重要的,在有些断点中,有些时候需要通过一个痛苦的循环或者递归函数才能让我们的对象等于某个确定的值。此时我们可以使用条件断点! 条件断点是这样的一类断点:只有当满足某个确定的条件时,才会命中断点。可以想象一下:我们只希望当对象在某个确定的状态,或者循环迭代到第nth次时才命中断点。单击Xcode editor中的‘gutter’可以添加一个断点,在断点上单击右键,然后选择‘edit breakpoint

11个强大的Visual Studio调试小技巧

℡╲_俬逩灬. 提交于 2020-03-16 07:50:21
简介 调试是软件开发周期中很重要的一部分。它具有挑战性,同时也很让人疑惑和烦恼。总的来说,对于稍大一点的程序,调试是不可避免的。最近几年,调试工具的发展让很多调试任务变的越来越简单和省时。 这篇文章总结了可能节省你大量时间的11个Visual studio的调试技巧和方法。 1 悬停鼠标查看表达式值 调试是很有挑战性的。比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等……但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。一种更简单的方法,把鼠标停在所需查看的数据上。如果是类或结构,那么点击展开可以很方便快速地查看其字段。 2 在运行过程中改变变量值 调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。 3 设置下一个运行位置 一个典型的调试案例是我们经常会用逐步调试的方法去分析为什么函数出错了。这时你遇到这个函数调用其他函数返回错误,而这个错误不是你想要的,你该怎么办?重启调试器?这里有个更好的方法,直接把黄色的运行位置箭头拖到你想要的运行位置。其实就是跳过中间运行代码,直接到想要的位置。很简单吧。 4

11个强大的Visual Studio调试小技巧

我与影子孤独终老i 提交于 2020-03-16 07:50:09
 简介   调试是软件开发周期中很重要的一部分。它具有挑战性,同时也很让人疑惑和烦恼。总的来说,对于稍大一点的程序,调试是不可避免的。最近几年,调试工具的发展让很多调试任务变的越来越简单和省时。   这篇文章总结了可能节省你大量时间的十个visual studio的调试技巧和方法。   1 悬停鼠标查看表达式值   调试是很有挑战性的。比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等。。。   但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。   一种更简单的方法,把鼠标停在所需查看的数据上。如果是类或结构,那么点击展开可以很方便快速地查看其字段。   2 在运行过程中改变变量值   调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。   3 设置下一个运行位置   一个典型的调试案例是我们经常会用逐步调试的方法去分析为什么函数出错了。这时你遇到这个函数调用其他函数返回错误,而这个错误不是你想要的,你该怎么办?重启调试器?这里有个更好的方法,直接把黄色的运行位置箭头拖到你想要的运行位置

利用VS调试存储过程

╄→гoц情女王★ 提交于 2020-03-16 07:17:24
SQL SERVER2008存储过程调试 昨天被问到sql server中存储过程怎么调试,我曾经写存储过程,调试方法非常笨拙,就是逐条运行语句,然后查看结果是不是预期的,这样的调试方法,实在是无奈之举,极大程度地限制了开发速度和准确性。今天在他的提点下,研究了下SQL SERVER 2008的存储过程调试。 1.在SQL SERVER2008中调试存储过程 下面内容引自MSDN SQL SERVER 2008的SSMS是支持单步debug的,可是在调试之前必须配置权限。 假设 SQL Server Management Studio 与 SQL Server 数据库引擎实例在同一台计算机上执行,则对于执行 Transact-SQL 调试器没有配置要求。可是,当 SQL Server Management Studio 与数据库引擎实例在不同计算机上执行时,若要执行 Transact-SQL 调试器,则必须在两台计算机上使用 “Windows 防火墙” 控制面板应用程序来启用程序和port例外。 在执行数据库引擎实例的计算机上,在 “Windows 防火墙” 中指定下面信息: 将 TCP port 135 加入�到例外列表。 将程序 sqlservr.exe 加入�到例外列表。默认情况下,sqlservr.exe 安装在 C:\Program Files\Microsoft SQL

TypeScript Jest 调试

与世无争的帅哥 提交于 2020-03-15 17:10:35
本文简要介绍了如何在 Jest 单元测试中利用 Chrome Node DevTools 来辅助调试。 背景 代码是 TS 写的 所测功能无 UI 界面,出现Bug后不容易定位 用 console 式 debug 效率太低,需要打断点式调试 在 Jest 单测中进行 debugger 目前有两种方法: 1. IDE (如webstorm , VSCode)集成的 提供的 Debugger 功能; 2. Chrome DevTools 步骤 1)在project.json 中添加启动debug的脚本 上述脚本是专门用于调试 基于jest 编写的 单元测试用例的 2. 配置DevTool监听测试程序 如果没有安装Chrome浏览器,但安装了基于具有Chrome DevTools的浏览器也是可以的。 在浏览器地址栏输入: chrome://inspect 然后选择:为Node程序打开DevTools,并选择要监听的地址、端口 3、启动程序开始调试   npm run debug 来源: https://www.cnblogs.com/f1194361820/p/12497298.html

反调试技术

烂漫一生 提交于 2020-03-14 07:55:40
反调试技术 在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 一、Windows API方法 Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerPresent可以用来检测当前进程是否正在被调试,以IsDebuggerPresent函数为例,例子如下: BOOL ret = IsDebuggerPresent(); printf("ret = %d\n", ret); 破解方法很简单,就是在系统里将这两个函数hook掉,让这两个函数一直返回false就可以了,网上有很多做hook API工作的工具,也有很多工具源代码是开放的,所以这里就不细谈了。 二、查询进程PEB的BeingDebugged标志位 当进程被调试器所附加的时候,操作系统会自动设置这个标志位,因此在程序里定期查询这个标志位就可以了,例子如下: bool PebIsDebuggedApproach() { char result = 0; __asm { // 进程的PEB地址放在fs这个寄存器位置上 mov eax, fs:[30h] // 查询BeingDebugged标志位 mov

go语言有哪些好的debug方法?

喜欢而已 提交于 2020-03-14 04:31:22
作者:Davie 链接:https://www.zhihu.com/question/40980436/answer/655067839 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作为一门静态语言,支持调试是必须的。 1、godebug godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。 但是目前GDB做的并不好,使用起来有这样那样的问题。 2、dlv 专业调试Go语言的一款工具。 安装:go get -u http:// github.com/derekparker/ delve/cmd/dlv 配置: export GOROOT=/usr/lib/golang export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin 使用: 1、dlv debug xxx.go 指定需要debug的文件 2、进入dlv交互式窗口后,b <filename>:<line> 指定断点 3、r arg 指定运行参数 4、n 执行一行 5、c 运行至断点或程序结束 3、日志输出 如果使用GoWeb框架进行开发