断点

Linux 下 vscode 断点调试

断了今生、忘了曾经 提交于 2020-02-29 02:04:44
一、环境搭建 1.下载 vscode 2.安装 gcc 和 g++ 3.然后在 vscode 的 Extensions 下安装以下插件: C/C++、Code Runner、C/C++ Snippets、EPITECH C/C++ Headers、File Templates、GBKtoUTF8 GBK、Include Autocomplete。 其中 C/C++ 和 Code Runner 必须要装。 此时,已经可以断点了。接下简单介绍已下怎么断点调试。 二、断点调试介绍 1.创建 test.c 文件 内容如下: #include<stdio.h> main(int argc, char const *argv[]) { int aa; printf("hello word \n"); scanf("%d",&aa); return 0; } 2.创建 launch.json 文件 直接按 F5,弹出以下画面: 选择 C++(GDB/LLDB) 然后选择默认配置。 这时候就会生成 launch.json 文件: { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0",

“断点目前不会被击中。 源代码与原始版本不同。”这是什么意思?

北城以北 提交于 2020-02-27 21:00:28
在Visual Studio中进行调试时,有时会添加一个断点,但它是空心的,VS会说“该断点当前不会被击中。源代码与原始版本不同。” 显然,这使我无法进行调试。 该消息到底意味着什么? 什么原始版本? 如果我刚刚打开解决方案并且未对代码进行任何更改,那么怎么会有“原始版本”? #1楼 当调试一个C ++项目,该项目加载已使用某些CRL语言(托管C ++,C#等)实现的模块时,也会发生这种情况。 在这种情况下,错误消息的确会引起误解。 解决方案是将 公共语言运行库(CLR)支持 配置属性放入启动项目,然后重新编译。 #2楼 对我有用的是将解决方案平台从x86更改为Any CPU。 更改为“任意”后,我设置了一个停止地址,运行了网站,打开了页面,单击了按钮,然后它停止了。 我关闭了站点,改回x86并成功执行了相同的顺序。 #3楼 在 解决方案配置中 选择 调试 ,而不是 发布 #4楼 我也遇到了这个。 导致我出现问题的情况: 我在本地运行完整的IIS7实例 我正在将软件版本化到单独的项目中 我是通过打开以前的版本引起的(VS提示在IIS调试中提示我是否要指向该实例,我回答“是”),然后打开当前版本(再次以“是”响应IIS提示) ),然后尝试在先前版本中进行调试。 为了解决这个问题,我仅关闭并重新打开了先前的预期版本,然后再次将其声明为调试源。 #5楼

某数分析第二弹

半城伤御伤魂 提交于 2020-02-27 18:37:13
​今天我们继续上次的接着分析,上次说了我们把eval动态运行的拿出来放到主页面方便调试,但是我们看到他这一段都是混淆过的 递归方式+混淆+简单扁平化 首先市面上有混淆工具可以达到这个效果,我自己也基于ast写了一个混淆工具,扯远了,我们来看下他这个都是数组方式读取字符串,在源码搜索的时候 我们发现了他初始化的位置, 因为他是动态解析的这个数组,我们只需要拿到他数组的成员放进去就行了, 其实我看到这里是很疑惑的,这个字符串竟然没有加密码,赤裸裸啊。 然后我们把字符串数组手动赋值之后我们拷贝这一段js到我写的混淆还原工具来看看 没压力,瞬间还原,工具自动计算作用域替换的。然后我们粘贴到notepad看看 这么看的话基本上他的所有东西都出来了,万事俱备,就差调试, 我们把这还原出来的js 替换上去,怎么替换呢,就是把昨天分析的 ret = eval (伪代码 把这个直接拷贝上去就行了,这样也方便调试。刷新之后debugger我们忘了处理,直接跳过算了,然后我们看到了这个 然后本着测试的精神,我又刷新了七八遍,发现一个问题 这个页面我是和js一起保存的并没有从服务器拉取最新的然是依旧可以正常使用,因为他有两处,我们尝试下这个 这段如果固定了js直接报错,不固定正常加密,这就头大了,因为这是一段加密后的字符串我们不管他是什么反正一会都要解密我们先不管。

LLDB调试器

佐手、 提交于 2020-02-27 12:34:42
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /* 先这么着 ... } 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。 LLDB LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。

golang调试工具Delve

拈花ヽ惹草 提交于 2020-02-26 05:43:33
 Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试。   线上golang服务出现问题时,Devle是必不少的在线调试工具,如果使用docker,也可以把Devle打进docker镜像里,调试代码。 安装Devle 安装Devle非常简单,直接运行 go get 即可: go get -u github.com/derekparker/delve/cmd/dlv   如果你的go版本为1.5请先设置环境变量GO15VENDOREXPERIMENT=1再运行go get。我的go版本为1.10,不用设置。 使用Devle调试golang服务   先写一个简单的web服务,然后使用Devle来进行调试。   在$GOPATH/src/github.com/mytest 文件夹下创建main.go package main import ( "fmt" "log" "net/http" "os" ) const port = "8000" func main() { http.HandleFunc("/hi", hi) fmt.Println("runing on port: " + port) log.Fatal(http.ListenAndServe(":" + port, nil)) }

开源项目asmjit——调用自定义方法demo以及windbg调试

﹥>﹥吖頭↗ 提交于 2020-02-24 10:01:32
asmjit是一个开源项目,使用它可以将代码即时的编译成机器码,也就是所谓的jit技术。 初次接触这个项目,编写了一个demo,学习它的使用方法。 现将编写的demo以及调试jit生成的机器码的过程总结出来,分享给大家 asmjit调用自定义方法的demo 代码如下 #include "asmjit.h" // [Dependencies - C] #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace AsmJit; #include <string> #include <iostream> using namespace std; int add(int value1, int value2) { cout << "arg1: " << value1 << " arg2: " << value2 << endl; return value1 + value2; } int main(int argc, char* argv[]) { X86Compiler c; //记录日志,将编译细节输出到控制台 FileLogger Logger(stdout); c.setLogger(&Logger); //新建一个无参数、无返回值的方法 c.newFunc

WinDBG常用断点命令

∥☆過路亽.° 提交于 2020-02-24 09:56:15
WinDBG提供了多种设断点的命令: bp 命令是在 某个地址 下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction 。 对于后者,WinDBG 会自动找到 MyApp!SomeFunction 对应的地址并设置断点。 但是使用bp的问题在于:1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效; 2)WinDBG 不会把bp断点保存工作空间中 。 bu 命令是针对 某个符号 下断点。 比如 bu MyApp!SomeFunction 。 在代码被修改之后, 该断点可以随着函数地址改变而自动更新到最新位置。 而且bu 断点会保存在WinDbg工作空间中, 下次启动 Windbg 的时候该断点会自动设置上去。 还bu 可以对还不能识别的符号设置断点,当系统中有新模块加载进来时,调试器会对未定断点再次进行识别,如果找到了匹配的符号则会设置它。而bp 断点会失败(因为函数地址不存在),bu 断点则可以成功。 新版的WinDBG中 bp失败后会自动被转成bu 。 bm 命令也是针对 符号 下断点。 但是它支持 匹配表达式 。 很多时候你下好几个断点。 比如,把MyClass 所有的成员函数都下断点: bu MyApp!MyClass::* , 或者把所有以CreateWindow开头的函数都下断点: bu user32

在WinDBG中设置断点的命令

痴心易碎 提交于 2020-02-24 09:55:23
命令 ========== ~0 bp 02sample!KBTest::Fibonacci_stdcall "r esp" 在零号线程上的KBTest类的Fibonacci_stdcall函数上设置断点, 并且在触发断点时执行"r esp"命令. bl 列出所有已经设置了的断点 bc * 清除所有断点 bp 02sample!KBTest::Fibonacci_stdcall “r esp;g” 在所有线程上设置断点, 并且在触发断点时执行"resp;g"两条命令. bm 02sample!*kbtest* 命令bm可以在参数中指定一个符号模式, 这样在所有与这个符号匹配的地址上都将设置一个断点. 上面的命令使用bm在KBTest的所有方法上设置断点. bu ole32!CoInitializeEx Windows操作系统会在必要时加载动态链接库, 而我们经常需要在一个还没有被加载的模块上设置断点. 命令bu可以用来设置一个延迟断点, 只有当这个断点所在的模块被加载时, 延迟断点才能成为一个真正的断点. 上面的命令将在DCOM的初始化函数中设置一个延迟断点. 内存访问断点 ============ 内存访问断点的名令为ba, 即Break on Access. 用户态的命令语法: [ ~ Thread ] ba [ ID ] Access Size [ Options ] [

windbg-bp、 bm、 bu、 bl、 bc、 ba(断点、硬件断点)

混江龙づ霸主 提交于 2020-02-24 09:54:44
bp bp 命令是在 某个地址 下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction 。 对于后者,WinDBG 会自动找到MyApp!SomeFunction 对应的地址并设置断点。 但是使用bp的问题在于: 1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效; 2)WinDBG 不会把bp断点保存工作空间中 bp Address或bp 伪寄存器或bp符号名称: 0:000> x Simple1Demo!CSimple1DemoApp::InitInstance 00640080 Simple1Demo!CSimple1DemoApp::InitInstance (void) 0:000> bp 00640080 0:000> bl 0 e 00640080 0001 (0001) 0:**** Simple1Demo!CSimple1DemoApp::InitInstance 0:000> x Kernel32!LoadLibraryW 7c80aeeb kernel32!LoadLibraryW = <no type information> 0:000> bp Kernel32!LoadLibraryW 0:000> bl 0 e 00640080 0001 (0001) 0:**** Simple1Demo

在WinDBG中设置断点的命令

只谈情不闲聊 提交于 2020-02-24 09:54:20
命令 ========== ~0 bp 02sample!KBTest::Fibonacci_stdcall "r esp" 在零号线程上的KBTest类的Fibonacci_stdcall函数上设置断点, 并且在触发断点时执行"r esp"命令. bl 列出所有已经设置了的断点 bc * 清除所有断点 bp 02sample!KBTest::Fibonacci_stdcall “r esp;g” 在所有线程上设置断点, 并且在触发断点时执行"resp;g"两条命令. bm 02sample!*kbtest* 命令bm可以在参数中指定一个符号模式, 这样在所有与这个符号匹配的地址上都将设置一个断点. 上面的命令使用bm在KBTest的所有方法上设置断点. bu ole32!CoInitializeEx Windows操作系统会在必要时加载动态链接库, 而我们经常需要在一个还没有被加载的模块上设置断点. 命令bu可以用来设置一个延迟断点, 只有当这个断点所在的模块被加载时, 延迟断点才能成为一个真正的断点. 上面的命令将在DCOM的初始化函数中设置一个延迟断点. 内存访问断点 ============ 内存访问断点的名令为ba, 即Break on Access. 用户态的命令语法: [ ~ Thread ] ba [ ID ] Access Size [ Options ] [