程序调试

web developer tips (29):在web应用项目里启用“编辑并继续”功能

可紊 提交于 2020-03-22 17:30:51
原文地址: How to enable Edit and Continue feature for Web Application Projects 如果你在调试一个web应用程序的时候,想进行编辑,可以有如下两种方法: http://www.watch-life.net/visual-studio/how-to-enable-edit-and-continue-feature-for-web-application-projects.html 方法一:在web项目的属性页里的web标签页,选中“ 启用编辑并继续 ”项 2、方法二:菜单 工具+选项+调试+编辑并继续 ,选中“ 启用编辑并继续 ”项。 我觉得这个“ 编辑并继续 ”功能很实用,可以边调试程序边修改程序,省得做了很少的修改又要重新启动调试。 注意:只有 Visual Studio 2008 的标准版和专业团队版才支持这个功能,另外不能在调试状态更改选项。 更多文章见: 守望轩 [ http://www.watch-life.net /] 来源: https://www.cnblogs.com/xjb/archive/2009/07/24/how-to-enable-edit-and-continue-feature-for-web-application-projects.html

他山之石:软件调试的方法与技巧

Deadly 提交于 2020-03-22 01:13:06
软件 的调试 也称纠错或排错 , 它是孤立并纠正错误的一种技巧性过程 。 软件错误的外部表现形式与内部 原 因之间往往没有 明显 的联系 , 所 出现的差错并非直接就能找 出原 因 。 因此 , 调试 既要对 错误 的性 质及 程序 本身进 行系统的研 究 , 在某种程 度上也要靠直觉与经验 。 到 目前为止 , 调试还 没有 一套经 得起检验 的完 整而 系统 的理论方法 , 排错时所采用的方法和时 间都不能事先确定 . 这样 , 通常认为调试是 困难的 , 是软件开发过 程 中最为艰 巨 的一种脑力劳动 。 本文拟就 调试的方法 、 技术与技 巧进行探讨 . 调试的步骤 诊断错误 或是 系统报 错 , 或是输 出结果与设 想的不 同 , 或是 陷入死循环等 , 都认为程序存在错误 . 确定错误的源发点 发现错 误的地方不一定是错误的源发点 , 应寻找所有与错误有关 的地方 , 从而确定错误的源发点 。 例如程序 : 1 0 F O R I= 1 T O 1 0 20 R E A D A ( I ) 30 N E X T I 4 0 D A T A 15 , 1 6 , 2 5 , 27 , 2 8 R U N O U T O F D A T A 1 N 2 0 错误发生于 2 0 行 , 但与第 4 0 行有关。 改正错误 确定错误及 位置后 , 针对错误 的具 体类

存储过程系列之调试存储过程 SQL Server 2005

主宰稳场 提交于 2020-03-21 14:27:33
在数据库中直接调试 在数据库中直接调试是调试SQL Server 2005的 存储 过程的最简单的方法。 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单步执行了,同时你也可以检查和修改存储过程内的T-SQL变量和参数。本文结尾处提供下载的压缩包中包括一个SQL Server 2005 Express版本的Northwind数据库。我在其中添加了一个名为“DoThings”的存储过程,它有一个参数@CategoryID。这是一个没什么实用价值的存储过程,但是它有很多的T-SQL语句和变量,另外还有一个参数,这将使我们能更好地练习存储过程的调试。 在 服务器 资源管理器中右键单击“DoThings”存储过程,然后选择单步执行存储过程的选项。 (注意:SQL Server调试只有Team Systems和Professional版本的Visual Studio才支持。) 调试器启动并且执行存储过程。因为存储过程“DoThings”需要一个传入值给@CategoryID,所以会弹出一个对话框让我们提供该值。输入1后单击OK。 首先会执行第一条语句。你可以选择逐语句或逐过程进行调试(快捷键分别为F11和F10),也可以在监视窗口中添加参数和变量。 存储 过程调试期间的截屏如下图所示。左侧的黄色箭头指的是当前执行的语句。监视窗口中显示的是

反调试技术二

回眸只為那壹抹淺笑 提交于 2020-03-21 10:27:21
五、使用 NtQueryInformationProcess 函数 NtQueryInformationProcess 函数是一个未公开的 API ,它的第二个参数可以用来查询进程的调试端口。如果进程被调试,那么返回的端口值会是 -1 ,否则就是其他的值。由于这个函数是一个未公开的函数,因此需要使用 LoadLibrary 和 GetProceAddress 的方法获取调用地址,示例代码如下: // 声明一个函数指针。 typedef NTSTATUS (WINAPI *NtQueryInformationProcessPtr)( HANDLE processHandle, PROCESSINFOCLASS processInformationClass, PVOID processInformation, ULONG processInformationLength, PULONG returnLength); bool NtQueryInformationProcessApproach() { int debugPort = 0; HMODULE hModule = LoadLibrary(TEXT( "Ntdll.dll " )); NtQueryInformationProcessPtr NtQueryInformationProcess =

LLDB调试器

血红的双手。 提交于 2020-03-20 22:57:10
#LLDB调试器 ###简介 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? ``` NSLog(@"%@", password); ``` 或者跳过一个函数调用来简化程序的行为? 实际应该调用这个函数:Foo() ``` NSNumber *n = @7; //complexCalculate() ; ``` 或者伪造一个函数实现? ``` int complexCalculate { return 9; /* 万行代码. ... } ``` 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。 ###基础 如图所示,当我们在程序的301行打上断点的时候,触发这段代码,程序就会进入lldb的调试模式.运行我们和调试器进行交互.这时候我们可以做些什么呢? ###help 最简单命令是 help,它会列举出所有的命令。如果你忘记了一个命令是做什么的,或者想知道更多的话,你可以通过 help来了解更多细节,例如 help print 或者 help thread。如果你甚至忘记了

使用nim-gdb调试nim程序

时光总嘲笑我的痴心妄想 提交于 2020-03-19 20:26:53
3 月,跳不动了?>>> 安装 前提有安装nim和mingw等 nim新版本已加入nim-gdb工具方便调试, 没有可以下载放nim/bin下 下载安装python3 修改 nim/config/nim.cfg 里 大概214行 gcc.options.debug = "-g3 -O0 -gdwarf-3" 可以调试不溢出问题 使用方法 首先我们写个dtest.nim proc foo(x: int): int = let y = x + 2 return y * 10 proc bar(x: int): int = if x == 3: return foo(x) return x * 100 proc main = var a = 1 let str = "foobar" var seq1 = @[0, 1, 2, 3, 4] a = bar(1) a = bar(2) a = bar(3) main() 然后终端运行 调试参数 --debugger:native 编译nim文件 nim c --debugger:native dtest.nim 编译完使用nim-gdb来调试程序 nim-gdb dtest 使用break或b 来设置断点 用run或r 来运行, 就会停在第8行断点 list或l 来查看行数周围的代码列表 next或n 来运行下一行, print或r 查看变量

Swift 使用 LLDB 调试命令

瘦欲@ 提交于 2020-03-19 04:35:17
swift 和 oc 的语法不一样: Xcode 调试技巧之 Swift 篇 打印和赋值,观察数值变量和view对象属性 p指令可打印其对象类型、内存地址以及该对象的值等具体信息, po指令则是打印其调用description方法得到的值。 e 赋值指令(后面有例子详解) 流程控制 n 命令,代表 Step Over 操作。 s 命令,代表 Step Into 操作。 finish 命令,代表 Step Out 操作。 c 命令,代表恢复程序执行操作。 修改指针变量的值,观测程序不同变化 程序中: testThreadReturn = “testThreadReturn” (lldb) p testThreadReturn (String) $R2 = "testTheardReturn" (lldb) e testThreadReturn = "zaozuo" (lldb) p testThreadReturn (String) $R4 = "zaozuo" 动态修改view的属性 Thread Return,函数设置断点返回值(swift不兼容) 这个在OC一切ok,在swift还不能用会有以下错误 (lldb) thread return "zaozuo-return" error: Error returning from frame 0 of thread 1: We

Script Debugger for Mac(脚本调试软件) v7.0.10

家住魔仙堡 提交于 2020-03-18 17:28:33
3 月,跳不动了?>>> Script Debugger Mac版是一款Mac平台的AppleScript编辑器, Script Debugger mac 可以帮助用户更轻松更快捷编译AppleScript,默认提供了AppleScript,Applet,通讯录脚本,Digital Hub脚本,Folder Action,Mail Rule脚本模版,在编译过程中用户可以使用Text Subsitution(长文本快速替换,类似于TextExpander),字体颜色自定义等功能。 软件功能 字典浏览器 使用Dictionary Explorer,您可以直接查看任何可编写脚本的应用程序中的实时数据。与Apple的脚本编辑器不同,您不必想象如何将应用程序脚本界面的书面描述转换为代码。Script Debugger以可视方式向您显示,并允许您与应用程序进行交互,而无需编写AppleScript行。 步进式智能调试 查看脚本正在执行的操作以及快速查找错误的最佳方法。逐行执行脚本以确切了解它们的执行方式。设置断点以在关键点暂停脚本。 不再使用AppleScript log 语句进行Caveman调试。脚本调试器会显示每个语句的结果以及脚本中每个变量的值。没有更好的方法来确切了解您的代码正在做什么。 强大的代码完成 Script Debugger提供了一组非常有用的代码完成工具

反调试技术揭秘

两盒软妹~` 提交于 2020-03-18 08:37:06
在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 一、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 al,

实用技能---断点调试

独自空忆成欢 提交于 2020-03-17 08:04:47
实用技能—断点调试 断点调试可以帮助我们检测数据,检测程序是如何运行的。 断点:程序运行时暂停的代码行。 步骤如下: 1.设置断点(在左侧行号处鼠标双击) 2.启动调试(点击鼠标右键—Debug As—Java Application) 3.但不运行(点击上方F6运行每点击一次程序向下执行一次) 4.观察程序运行过程 监测变量(这一步可以在该区域观察当前对象的取值) 5.发现问题 6.修正代码 7.取消断点(点击红色停止按钮) 再点击javaSE按钮退出 8.重新运行程序 来源: CSDN 作者: ly~~~ 链接: https://blog.csdn.net/ly179819/article/details/104852036