程序调试

从0开发3D引擎(四):搭建测试环境

有些话、适合烂在心里 提交于 2020-01-09 09:10:32
目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测试 测试时间开销 测试内存开销 搭建本地测试环境 大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境。 上一篇博文 从0开发3D引擎(三):搭建开发环境 了解自动化测试 对于引擎开发这种复杂、长期的项目,为了减少bug,提升长期的开发效率,自动化测试必不可少。在我们的 Wonder.js 引擎中,包括了本节介绍的3种自动化测试,测试覆盖率达到了95%。 本系列为了节省篇幅,不进行自动化测试。因此本节只进行简单的介绍,不给出实际的案例,读者可以到 Wonder.js->test/ 目录下查看自动化测试实例。 单元测试 我们需要写测试用例对单个函数进行单元测试。 搭建环境 使用 jest 作为测试框架, sinon 进行stub。 如果读者想了解stub的概念,可以参考 我对Stub和Mock的理解 因为不能直接使用js库,需要写对应的 FFI (类似于typescript的d.ts文件)才能在Reason中被调用,所以我们可以使用 bs-jest 和Wonder的 Wonder-bs-sinon 作为FFI 集成测试 相对于单元测试,集成测试的测试目标变为某个特性

gdb调试

亡梦爱人 提交于 2020-01-09 01:06:05
编译时加入 -gdwarf -2 -g3 -O0 可以查看宏定义macro expand *** Ctrl + C 命令中断下来后 c继续 break break functionname,在函数名为 functionname 的入口处添加一个断点;//b main break LineNo,在当前文件行号为 LineNo 处添加一个断点;// b 452 break filename:LineNo,在 filename 文件行号为 LineNo 处添加一个断点。//b anet.c:441 bt:查看堆栈 f *:切换堆栈 info break:查看断点 //info b disable *//禁用某个断点 enable * //启动某个断点 如果没有加上*时,则是禁用或启动全部的断点 delete 编号 为删除某个断点 list : 查看当前断点处的代码 l + l - 回车:重复 打印 p *:查看值 P &*:查看值地址 p *=*:给值 ptype *:查看数据结构 info args:查看当前函数参数的值 线程 查看线程 info thread 切换线程 thread 2 查看当前函数的参数值:info args 控制流命令 next: n跳到下一步不会进入函数体. step: s遇到函数进入函数内部 return:在当前位置返回. finish:执行函数到ghip退出

ios真机调试教程(不上架App Store安装到手机)

六眼飞鱼酱① 提交于 2020-01-08 09:30:08
原文 不上架App Store安装到手机调试测试,需要用到ios真机调试证书打包的ipa才能安装到非越狱的手机使用。 2017年最新整理的ios真机调试的详细图文步骤流程,轻松的把你开发的ios app安装到手机体验。 工具/原料 苹果开发者账号 ios证书创建工具Appuploader ios调试证书介绍 1 调试证书分两种 ios开发证书和Ad hoc证书 如果你用xcode开发,可以直接用开发证书,用手机连接xcode进行真机调试,不过现在也能免证书调试,很方便。 如果需要打包发给朋友、客户测试,不方便直接拿手机给你连接xcode进行灌装,还是需要iOS测试证书(Ad hoc)打包,才能发给别人安装。 如果你用HBuilder等跨平台开发工具开发的iOS APP,也要用到iOS测试证书(Ad hoc)打包 出来的IPA才能安装到非越狱的手机测试。 END 详细步骤 1 1、申请一个APPid(应用标识符 2、添加调试设备 3、申请iOS调试证书 4、配置调试描述文件 5、iOS打包ipa 6、安装到手机调试 END 一.创建唯一标示符App IDs 1 登录苹果开发者中心,进入证书页面。 点击证书、ID及配件文件,进入设置。 2 选择App IDs –>点击+创建一个新的App ID 其中有两项需要你自己填: 第一项Name,用来描述你的App ID,这个随便填,没有什么限制

Python——assert(断言)

岁酱吖の 提交于 2020-01-08 09:08:24
*/ /*--> */ 目录 About assert的使用 启用、禁用断言 一些建议 最后的扩展 About 返回顶部 在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃。 这时,就要用到断言assert了,Python中的断言语句格式用法很简单。 断言 assert 是指期望用户指定的条件满足,它是当用户定义的约束条件不满足时触发 AssertionError 异常,因此 assert 语句可以视为条件式的 raise 语句。它的主要功能是帮助程序员调试程序,从而保证程序运行的准确性,一般在开发调试阶段使用。 assert的使用 返回顶部 assert的一般用法 assert condition assert判断条件(condition)是否成立,如果不成立,则抛出异常,逻辑上等同于: if not condition: raise AssertionEerror() a = '' # assert a if not a: raise AssertionError('a等于空') assert的另一种形式 assert condition, expression 如果condition为False,就raise一个描述为expression的AssertionError的错误出来,逻辑上等同于: if not condition:

GDB调试指南-单步调试

 ̄綄美尐妖づ 提交于 2020-01-07 19:34:28
前言 前面通过《 启动调试 》,《 断点设置 》,《 变量查看 》,我们已经了解了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

GDB调试基础入门

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-07 19:19:57
Ubuntu 系统下使用 GDB 调试需要进行一些提前的设置。 1. 安装 gdb 有些版本的系统可能没有安装该工具,需要自行安装。 cv@cv:~# sudo apt install gdb 2. 设置 ulimit 参数 ulimit 是Linux系统的内置功能,用于为由它生成的 Shell 进程及其子进程的资源的使用设置限制。 ulimit -a 用于显示当前所有的 limit 信息。 cv@cv:~# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 515120 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1048576 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192

对nodejs的debug调试方法记录

ε祈祈猫儿з 提交于 2020-01-07 17:36:40
近期爆了一个nodejs下面的Mongo-express的rce漏洞,刚好趁这个机会对nodejs的debug调试这块研究一下。 采用vscode来进行对nodejs源码的调试。 CVE-2019-10758 PoC Setup docker pull mongo docker run -p 27017:27017 -d mongo npm install mongo-express@0.53.0 cd node_modules/mongo-express/ && node app.js 首先vscode工作区要在mongo-express目录下面,如果不在这个含有package.json同目录下,打断点,开调试会在断点爆 Breakpoint set but not yet bound错误。 然后vscode建立launch.json的调试文件 { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "启动程序", "skipFiles": [ "

Visual Studio 2010新功能-IntelliTrace

僤鯓⒐⒋嵵緔 提交于 2020-01-07 14:12:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 推荐Visual Studio 2010新功能-IntelliTrace(智能跟踪) Visual Studio 2010 Ultimate 版本有个新功能IntelliTrace(智能跟踪), IntelliTrace被引入到Visula Studio中来加速我们对.NET应用程序的调试 ,它通过对预先设置的事件和方法在运行过程中的跟踪并将其有效地传递给调试执行者,从而快速的传递程序在执行过程中的状态和各种信息来帮助开发者更好的调试程序,快速的发现问题。实际上,在Visual Studio 2010之前,Microsoft Visual Stuido已经帮助我们很好的继承了调试工具,比如对变量的监控,对堆栈的查看等等,并且允许设置断点进行单步调试等。所有的这些都在很好的帮助开发者来了解程序在不同的执行过程中的状态以及检测是否按照预先实际的逻辑进行运转,而且更多的,我们通过断点后监测程序状态来发现问题所在。而这样所存在的问题是,一些逻辑上的错误可能发生在断点执行之前,而且很可能是一些无法追查。开发者必须停止当前的调试,重新设置断点并启动调试,而这样的试验过程往往需要很多次才能找到正确的位置来设置断点。IntelliTrace智能的将一些调试信息和程序状态自动的跟踪并实施的展现给开发人员

115资源哪有卖的

一个人想着一个人 提交于 2020-01-07 12:27:49
【十 薇:PPS33A】【品种繁多】【任意挑选】 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。本文以及后续的文章(https://blog.csdn.net/xufive/category_9506563.html)正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你们。  明确学习目标,不急于求成,不好高骛远 当下是一个喧嚣、浮躁的时代。我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会。我始终认为,学习是需要沉下心来慢慢钻研的,是长期的;同时,学习不应该被赋予太多的功利色彩。一个 Python 程序员的成长路线图应该是这样子的:基础语法–>语感训练–>课题练习–>分方向继续学习–>中级程序员–>拓展深度和广度–>高级程序员。  然而,很多新手的学习路线图却是这样子的:学完基础语法之后,不了解 HTML 协议和 Ajax 异步请求,就兴冲冲研究爬虫去了;或者,学完基础语法

调试排错 - Java问题排查:Linux命令

可紊 提交于 2020-01-07 08:59:05
本文原创,更多内容可以参考: Java 全栈知识体系 。如需转载请说明原处。 Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查。@pdai 文本操作 文本查找 - grep grep常用命令: # 基本使用 grep yoursearchkeyword f.txt #文件查找 grep 'KeyWord otherKeyWord' f.txt cpf.txt #多文件查找, 含空格加引号 grep 'KeyWord' /home/admin -r -n #目录下查找所有符合关键字的文件 grep 'keyword' /home/admin -r -n -i # -i 忽略大小写 grep 'KeyWord' /home/admin -r -n --include *.{vm,java} #指定文件后缀 grep 'KeyWord' /home/admin -r -n --exclude *.{vm,java} #反匹配 # cat + grep cat f.txt | grep -i keyword # 查找所有keyword且不分大小写 cat f.txt | grep -c 'KeyWord' # 统计Keyword次数 # seq + grep seq 10 | grep 5 -A 3 #上匹配 seq 10 | grep 5 -B 3 #下匹配