程序调试

在Zend Studio中调试PHP(5/5)

五迷三道 提交于 2019-11-30 10:25:43
本教程将教会您如何调试文件和应用程序以便从您的PHP代码中获取最大的效率和准确性。Zend Studio的调试功能可以检查并诊断PHP代码在本地或远程服务器上的错误。调试器允许您通过设置断点、暂停启动的程序、单步调试代码和检查变量的内容来控制程序的执行。调试应该在您的脚本和应用程序已经充分形成试用和测试阶段试用。 Zend Studio最新试用版下载请猛戳>>> 提供的项目 在整个教程中,在您的项目中插入提供的代码片段。 必备条件 Zend Studio 12.0或以上版本 试用Zend Debugger进行Zend Studio调试 Step 5:调试PHP应用程序 Zend Studio允许您调试位于服务器上的应用程序、项目或文件。您可以调试本地(工作区)文件副本或服务器文件副本。 1. 在一个Web服务器上放置您的应用程序。 2. 在PHP资源管理器中右键单击该文件,然后选择Debug As | PHP Web Application。Debug PHP Web Application对话框将会显示。 3. 确保URL是正确的,如果需要可以修改它。 4. 单击OK。 5. 如果询问是否打开PHP Debug Perspective,单击Yes。一些视图将会打开有关脚本的信息和调试进程时第一个<?php标签出现的地方。 6. 选择Browser视图(具有标签的编辑器视图)

[调试]_[初级]_[Windbg使用教程-2]

笑着哭i 提交于 2019-11-30 10:20:38
场景 1.我们开发C++程序时, 发布给客户用的是Release模式, 并添加崩溃报告,在程序崩溃退出时,可以通过使用WinDbg来调试崩溃产生的dmp文件. 2.我们也可以用来调试程序, 加断点, 看局部变量,只是这里主要还是讲调试dmp的. 说明 1.Windbg并不是系统标配的, 需要通过SDK下载安装. Debugging Tools for Windows . WinDbg, 一个独立的图形Debug工具, 可以调试用户模式和内核模式. 相当于vs的调试器独立版本,或者说是linux里的gdb. 如果配合Windows SDK的C++编译工具, 甚至不需要VS都可以用SDK自带的编译工具和WinDbg开发程序. 2.获取Windows dll pdb文件可以通过两种方式: – 方式1: 启动windbg后,在[Symbol Search Path] 对话框中加入下面的路径: srv*D:\SystemSymbols*http://msdl.microsoft.com/download/symbols 这种方式就是在调试过程中,windbg调试器会从符号表服务器自动下载调试所需的PDB文件. – 方式2: 预先下载PDB文件,这样能减少调试的等待时间. "C: \Program Files \Debugging Tools for Windows (x86) \symchk

Windbg调试----多线程控制调试

ε祈祈猫儿з 提交于 2019-11-30 10:19:42
在调试程序的时候,可能经常会有这样的需求,让一个线程在特定的时候才让其开始执行或者暂停执行。比如复杂的多线程导致死锁的问题,又或者多线程中的Race Condition 导致程序执行异常等。 很多时候,我们可以借助编写调试代码来达到多线程的调试,可是有些情况下调试的执行粒度是指令级别的,那么这个时候我们得借助调试利器Windbg了。本文我们将以 《C/C++编程教训—-函数内静态类对象初始化非线程安全(C++11之前)》 为调试例子 (没看过的同学,可以先看一下这篇博文)。个人觉得这个例子不错,这个调试的执行力度是指令级别的,因为其存在的线程安全问题的代码是编译器生成的,并不是程序员自己的代码。 测试代码 以下这段代码,创建两个线程,这两个线程等待主线程触发的event,然后打印 TestFunction 返回的对象的成员变量 m_iVal 。**正常情况下,两个线程的打印的 m_iVal 都为4。可是在之前博客有提到过, TestFunction() 是非线程安全的,而我们也无法通过增加调试代码来触发这个非线程安全的问题。那么下一章节,我们将通过Windbg来控制线程的执行来触发这个非线程安全的问题。 TestObject TestFunction() { static TestObject obj; return obj; } HANDLE hEvent = NULL ;

windbg调试-----断点设置

≯℡__Kan透↙ 提交于 2019-11-30 10:18:56
几个基本概念: 1:windbg中的符号和语句命令 ; 命令分隔符 {} 表达式块 $$ 命令中的注释,已 “;”代表注释结束 .catch 当程序错误的时候,防止程序终止 .if .do .while .break .for .else 和C语言中的关键字类似 几个命令: c命令:比较内存 例如: 考虑如下程序 void main() { char rgBuf1[ 100 ]; char rgBuf2[ 100 ]; memset(rgBuf1, 0xCC , sizeof (rgBuf1)); memset(rgBuf2, 0xCC , sizeof (rgBuf2)); rgBuf1[ 42 ] = 0xFF ; } 比较rgBuf1和rgBuf2内存内容可以使用如下命令: 0 : 000 > c rgBuf1 (rgBuf1 + 100 ) rgBuf2 或者 0 : 000 > c rgBuf1 L 100 rgBuf2 线程控制命令: 断点设置命令: 变量显示命令: 调试分析命令: 用户空间: 用户空间即用户模式的应用程序运行的空间,他的虚拟地址由0x00000000 到0x7FFFFFFF 设置断点只是针对某个线程空间,所以如果需要队某个线程使用bp 虚拟内存地址形式的断点的话,需要使用.process [process Number]切换到线程空间 设置断点:

Windbg调试----Windbg入门

十年热恋 提交于 2019-11-30 10:17:41
Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。 相关资料 本人也是在维护和开发产品的过程中使用过Windbg,但并未对Windbg进行过系统和深入的学习,也通过这一系列的博客来完善自己对Windbg以及周边知识的理解与使用。我也列出自己正在或者即将阅读的书/资料与大家一起分享: << Windows用户态程序高效排错 >> << 软件调试 >> Modern Windows Exploit Development Windbg.org Windbg帮助文档翻译 安装Windbg 由于目前微软官网上并没有单独提供Windbg的下载安装包,可以通过以下两个途径获取: 下载安装WDK 有网友提供了单独的MSI安装包,可以通过Goole搜索获取 Windbg同时也分32位和64位版本,有网友建议是使用32位Windbg调试32位程序,64位Windbg调试64位程序。 本人平时使用64位的Windbg,如果需要分析32位的程序/Dump, 使用如下命令进行CPU模式的切换: .load wow64exts !sw Windbg调试程序 在使用Windbg调试程序之前,先给大家展示下我的测试程序: int main() { char * pStr =

WinDbg命令详解--远程调试

别说谁变了你拦得住时间么 提交于 2019-11-30 10:17:21
windbg + windbg方式 两边都是windbg。windbg本身支持的链接类型有很多:tcp、pipe、com、ssl等。这里只介绍tcp方式 设置方法: 目标机器(需要设置端口) 方式一:通过命令行 windbg.exe - server tcp : port = 12345 方式二:windbg运行过程中使用命令 .server tcp : port = 12345 本地机器(设置目标机器的Ip和端口) 方式一:通过命令行 windbg.exe - remote tcp : port = 12345, server = 192.168.1.101 方式二:运行时 通过菜单选择 File->Connect to Remot Session..., 在弹出的对话框中输入tcp : port = 12345, server = 192.168.1.101 通过上述方法即可链接目标机,并调试目标机程序。 此方法的特点: 1. pdb符号文件必须存放在目标机器。 2. 使用启动调试功能时,需要在目标机器使用windbg启动要调试的进程 pdb符号一般都很大,放在目标机确实有很多不便。有没有其他方式呢?咱们看第二种 windbg + dbgsrv 方式 目标机器使用dbgsrv,本地机器使用windbg dbgsrv是windbg中的一个组件 设置方法: 目标机器(需要设置端口)

《软件工程导论》课后习题答案

六眼飞鱼酱① 提交于 2019-11-30 09:47:29
来源:https://blog.csdn.net/Rong_Toa/article/details/80771976 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题表现在以下几个方面: (1)用户对开发出的软件很难满意。 (2)软件产品的质量往往靠不住。 (3)一般软件很难维护。 (4)软件生产效率很低。 (5)软件开发成本越来越大。 (6)软件成本与开发进度难以估计。 (7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。 2.为什么会产生软件危机? (1)开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。 (2)软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。 (3)尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。 3.怎样克服软件危机? (1)充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训

visual studio调试exe程序

浪尽此生 提交于 2019-11-30 09:35:44
标题:How to debug and profile any EXE with Visual Studio 文章:https://devblogs.microsoft.com/visualstudio/how-to-debug-and-profile-any-exe-with-visual-studio/?utm_source=vs_developer_news&utm_medium=referral 来源: https://www.cnblogs.com/Tpf386/p/11576588.html

GDB 调试指南

核能气质少年 提交于 2019-11-30 07:15:11
本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 00 介绍 GDB(GNU Debugger)是 UNIX 及 UNIX-like 下的强大调试工具,可以调试 ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal 等语言,这一份指南我们主要以 c 来作为例子。 01 基础 1.1 判断程序是否可调试 # gdb helloworld Reading symbols from helloWorld...(no debugging symbols found)...done. # gdb helloworld Reading symbols from helloWorld...done. 上面一种有 no debugging symbols found 表示不可调试,下面是可调式的。 或者 readelf 查看段信息: 1# readelf -S helloworld|grep debug 2 [28] .debug_aranges PROGBITS 0000000000000000 0000106d 3 [29] .debug_info PROGBITS

Spark系列(五)IDEA编写及调试Spark的WordCount程序

人走茶凉 提交于 2019-11-30 07:03:58
使用IDEA编写Spark程序的前提条件是IDEA已经配置好Scala的编写环境,可以参考 Scala–IDEA配置及maven项目创建 在这里,我们以hadoop的 wordcount 为例,编写Scala程序,以 本地模式 和 Yarn模式 分别测试程序。Spark程序在开发的时候,使用IDEA编写程序及调试过程如下: 一、项目创建 1、创建Scala的Maven项目,pom.xml文件如下所示: < properties > < log4j.version > 1.2.17 </ log4j.version > < slf4j.version > 1.7.22 </ slf4j.version > < spark.version > 2.1.1 </ spark.version > < scala.version > 2.11.8 </ scala.version > </ properties > < dependencies > <!-- Logging --> < dependency > < groupId > org.slf4j </ groupId > < artifactId > jcl-over-slf4j </ artifactId > < version > ${slf4j.version} </ version > </ dependency > <