首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码调试最佳实践

重现你的bug(但是要怎么做?) 接下来在这篇文章里,尝试整理大家针对的关于代码调试的推文发来的各种不同的观点和看法。...对如何做到这一点有直觉,但是对于怎样才能从“看到这个bug两次”跨越到“可以根据需要在笔记本电脑上持续地再现这个bug”这一点,不知道怎么解释,而且想知道你用来调试的技术是否依赖于这些不同的开发领域...花了10分钟试图让编译,但迄今为止失败了,但它看起来很有趣,想继续尝试!! 这里想重点强调一下:信息是最重要的,你需要做任何必要的事情来获取信息。...每当我的程序有问题并且报告这样的错误信息“Error:无法连接到某个IP的端口443:连接超时”都想说:“谢谢,这就是想知道的事情”。...结语 当我在谈到代码调试技巧总感觉遗漏了一件重要的事情,那就是对人们在代码调试中哪里会遇到困难的一种更深入的理解。通常我们很容易说:“好吧,你需要重现这个问题。

93610

代码调试的最佳指南

重现你的bug(但是要怎么做?) 接下来在这篇文章里,尝试整理大家针对的关于代码调试的推文发来的各种不同的观点和看法。...对如何做到这一点有直觉,但是对于怎样才能从“看到这个bug两次”跨越到“可以根据需要在笔记本电脑上持续地再现这个bug”这一点,不知道怎么解释,而且想知道你用来调试的技术是否依赖于这些不同的开发领域...花了10分钟试图让编译,但迄今为止失败了,但它看起来很有趣,想继续尝试!! 这里想重点强调一下:信息是最重要的,你需要做任何必要的事情来获取信息。 ?...每当我的程序有问题并且报告这样的错误信息“Error:无法连接到某个IP的端口443:连接超时”都想说:“谢谢,这就是想知道的事情”。...结束语 当我在谈到代码调试技巧总感觉遗漏了一件重要的事情,那就是对人们在代码调试中哪里会遇到困难的一种更深入的理解。通常我们很容易说:“好吧,你需要重现这个问题。

1.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

10+年程序员总结的20+条经验教训

4.每一行新代码必须至少执行一次 在你真正完成一个功能之前,你必须对进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。...故障排除 9.bug总是难免的 不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。...14.关联时间戳 在故障排除,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。...当我在重启系统,如果服务当掉,会发生什么?以此来研究的工作原理。 20.带着问题睡觉 如果你正在解决一个很难的问题,那么不妨带着问题睡觉。...你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。 希望这些经验能对大家有用。

82170

10多年程序员总结的20多条经验教训

4.每一行新代码必须至少执行一次 在你真正完成一个功能之前,你必须对进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。...故障排除 9.bug总是难免的 不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。...14.关联时间戳 在故障排除,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。...当我在重启系统,如果服务当掉,会发生什么?以此来研究的工作原理。 20.带着问题睡觉 如果你正在解决一个很难的问题,那么不妨带着问题睡觉。...你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。

77620

关于CSRF漏洞的一次有趣的交互

故事的开端是复测的时候,当我用Google浏览器复现CSRF的时候,已经无法复现成功的时候,复测报告对CSRF的漏洞就填写了已修复。然后客户提出了疑问。如下: 既然并没有修复,那为什么复现不了了呢?...和客户同步了相关情况后,客户提出了新的疑问: 这里重新使用Google浏览器进行了测试,打开F12查看数据流观察一下: 这里我们发现,当我们去轻轻的点击了我们构造的测试链接,浏览器发了四个请求:...最后一次请求用获取的Cookie在次向接口请求,但是请求方法变成了GET,而删除操作的参数是在POST数据包中,并没有提交过来,所以即使接口返回成功,但是并没有删除。...当我正准备提交测试结果,并说明无法复现的时候,老大叫到了说:“这不是CSRF可以删除吗?你为什么删不掉呢”,过去瞅了一眼,确实执行并成功删除了,这接口看眼缘?...SameSite 属性有三个值可以设置 Strict Lax None Strict最为严格,完全禁止第三方 Cookie,跨站点,任何情况下都不会发送 Cookie。

44520

【软件架构】支持大规模系统的设计模式和原则

可靠性:系统应该准确地处理数据返回正确的结果。一个可靠的系统不会静默失败或返回不正确的结果或创建损坏的数据。...一个可靠的系统以一种努力避免故障的方式构建,当它不可能,它会检测、报告,甚至可能尝试自动修复它们。...由于这种性质,无法深入研究每个主题,而只是提供一个概述。也就是说,在每个主题中,尝试添加有用的链接,指向关于该主题的更全面的资源。 所以让我们深入研究吧!...拥抱异步 当我们进行同步调用时,执行路径会被阻塞,直到返回响应。这种阻塞有资源开销,主要是内存和上下文切换的成本。我们不能总是只使用异步调用来设计我们的系统,但是当我们可以让我们的系统更高效。...当一个依赖不可达,所有对请求都会失败。 根据 Fail Fast 原则,当我尝试调用时,我们希望我们的系统快速失败,而不是等到超时。

54820

【Python】已解决报错: TypeError: unsupported operand type(s) for *: ‘int‘ and ‘NoneType‘

通常发生在尝试使用不兼容的类型进行操作。...特别是,当我尝试将一个整数与NoneType(即None)进行乘法操作,就会触发这种错误。 这种错误通常表明代码中的某些部分没有按照预期的方式处理数据类型。...函数返回None:调用的函数可能在某些条件下返回None,而调用者未进行适当的检查。 错误的数据类型转换:在类型转换过程中可能产生了错误,导致期望的整数类型变成了None。...错误的逻辑判断:在条件判断中可能存在逻辑错误,导致在不应该使用None的地方使用了。...代码审查:定期进行代码审查,以识别和修复可能导致TypeError的潜在问题。

23710

推荐三款常备开发辅助神器

charles 在眼前没有秘密 程序员喜欢把自己的东西加密加密再加密,而面对别人的东西,总喜欢能够看的一清二楚,然后从中学习一些经验。 比如通过观察别人的app请求流程,可以看一下返回什么样的数据?...有些接口如何组织请求流程等。 要完成上面的任务, charles 真的是不二之选。 ? 截图是监控到的某电商的请求数据,左边部分显示的是请求接口,右边是响应的结果。...就通过这款工具学习过如何对api进行版本维护,如何有效组织首页数据返回(到底是一个接口搞定所有还是多个接口,前端多次调用?) 当然上面仅仅是的一个作用。...另外一个效果就是,自己的应用出了问题,可以方便的通过看到请求数据,以此来进行一些判断,修复bug。特别是强烈推荐测试人员使用,有很多bug是有前后的因果关系,需要看到数据开发人员更容易进行修正。...如果你在开发中被各个第三方支付提供的demo搞得焦头烂额,相信它能够帮助到你。 ---- 本文写作时间:3小(这效率……也是醉了!)

48510

10+年程序员总结的20+条经验教训学习

4.每一行新代码必须至少执行一次 在你真正完成一个功能之前,你必须对进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。...故障排除 9.bug总是难免的 不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。...14.关联时间戳 在故障排除,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。...其他 19.尝试 如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果将参数设置为-1,会发生什么?...当我在重启系统,如果服务当掉,会发生什么?以此来研究的工作原理。 20.带着问题睡觉 如果你正在解决一个很难的问题,那么不妨带着问题睡觉。

63170

Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

虽然之前从没听过Oracle Advanced Support,但是当我很快的google完之后,了解到似乎是一个允许oracle的技术支持在外部登入,并且在oracle系统环境下进行任何技术支持需要的操作的服务...当我们把”test”加到请求url的末尾,服务器返回了404。同时服务器也返回了这样一个信息:Named SQL not found。如果我们尝试”test”之外的其他字符串,得到了同样的返回信息。...我们把name的值放进先前尝试的GET请求中。 Hey!我们得到一些返回!但是我们少了一个参数,让我们加进来! 虽然没有从服务器获得任何返回,但是也没有返回任何错误!...SQL Execution 这就是createNamedSQL中在包体里面包含一个空json对象的POST请求: 我们得到一个关于SQL_NAME列的错误,当我们在包体中包含空的json对象这不是很意外...结论 关于这个匿名sql执行联系了oracle,他们很快的回复并且修复了这个问题。

1K70

谷歌广告越权获取Youtube私享视频图像帧分析

漏洞测试 2019年底的时候,参与了YouTube的漏洞众测,在此过程中尝试去测试对他人未授权视频的获取。当用户上传视频到YouTube,可以对上传视频选择三种隐私权限。...Youtube主站点会对请求中的视频执行权限检查,因此,最后的响应一直返回’This video is private’。 因此,这里需要转变一下思路。...广告制作完成后,看了一下Google Ads的各种功能,发现当中的功能非常全面,为此着重看了一下其中与YouTube相当的功能。...当我标记视频的时候,从burp抓包流量中发现了以下包含视频ID的请求包: POST /aw_video/_/rpc/VideoMomentService/GetThumbnails HTTP/1.1 Host...果然,让吃惊的是,这种视频ID替换之后,竟然能成功返回相关视频的base64编码!

1.8K30

一行代码实现display过渡动画原理

并没有出现动画,非常生硬的出来了,有一些场景又要性能,比如初始化不渲染,但是当出现又要有动画的时候,就有可能使用这行代码 test.onclick = function () {...因为读取dom的这些特殊属性,浏览器就会强制清空渲染队列一次,让我拿到最新的值。也就是说读取的时候,其实已经是display为"block"了,因此。我们出现了过渡动画 效果如下所示: ? ?...其实display是不能出现动画的,所以标题+了引号 怎么才能有过渡? 有数字的变化,例如透明度,从0-1....,框架本身要做优化,合并一段时间的数据更新再去真正更新dom,等这些事情都做完了,才能去更新dom节点,然后我们才能看到最新数据对应的节点 当我们真的要去更新dom节点的时候,也存在一个队列。...app.style.display = "block"这行代码时候,dom节点此时并没有更新,js解析引擎是聪明的,发现你后面马上有代码要修改dom节点,会先存入队列中集中一次性操作 当我们执行了app.offsetHeight

1K40

什么是会话固定

众所周知,HTTP请求是无状态的,这意味着当我们发送登录请求,我们有一个有效的用户名和密码,没有默认机制来知道与发送下一个请求的是同一个人。...如果我们发送一个包含有效会话的请求(该会话存在于我们的会话存储中 - 在我们的例子中是内存),我们不会在响应中返回 Set-Cookie 标头: 当用户登录,我们可以将用户信息存储在序列化的 cookie...但是,如果攻击者有自己的有效会话并尝试将其与其他用户关联,该怎么办?在这种情况下,他可以代表受害者采取行动。 当我们没有在登录等操作上生成新的 sessionIds(唯一标识符),就会出现问题。...因此,如果攻击者 (Bob) 向 /me 发送请求,他将返回 Joe 的数据: 我们能够通过使用 Bob 的会话来获取 Joe Data。...是的,在 0.6.0 之前的版本中,问题就在那里,Passport 维护者认为会话重新生成应该在应用程序端完成,但一段时间后他们意识到问题的重要性,并在 0.6.0 版本中修复

14310

挖洞经验|看我如何挖到了一个价值5K刀的谷歌“404页面”

从表面上看,这个页面只不过是一个简单的登录页面而已,看起来这个页面貌似是给Google的员工自己准备的… 每当我访问这个页面,该页面便会直接从https://static.corp.google.com...下面是一张图片样本的URL地址: https://static.corp.google.com/corpsso/images/PICT0004.jpg 好吧…在进行了一堆乱七八糟的尝试之后,感觉剩下唯一能做的就是去尝试触发一些错误了...只不过现在仍然不知道这个“SFFE”到底是个什么鬼,但看起来像是Google后台用于处理Bigtable查询请求的某种请求处理引擎。...,请各位见谅): 这些查询数据中包含表名以及不同Bigtables的路径地址,而正是请求让后台服务器返回了这些查询数据。...年2月19日:Google告诉他们采用了一个临时的修复策略,并忘记给我发送报告了… 2017年3月10日:5000美金到手 2017年3月16日:Google永久修复了该问题

1K90

一、服务器的缓存控制

我们仔细的阅读一下这个简单的缓存资源请求流程,发现其中有几个重要的节点。首先,服务器在返回该资源,要标记该资源的有效期。...基本上和max-age=0差不多一样的效果,但是含义肯定是不一样的,就看服务器要怎么理解和处理不同的字段。   那么什么时候缓存才能派上用场呢?...当我们点击浏览器的前进后退按钮的时候,就会直接从缓存中获取数据,另外,重定向的时候,也可能会使用到缓存。那这两类操作有啥区别呢。...:   大家还可以自己尝试设置no-store,no-cache等字段。...并且我们还学习了条件请求以及强弱Etag,大家要着重了解下。然后呢,本篇没有问题,但是有个遗留的小例子没写,就是条件请求的例子。大家可以参照上面的小例子,试着在这里玩一下条件请求

1.4K30

笨办法学 Python · 续 练习 13:单链表

将描述数据结构,列出你应该实现的所有操作,并给你实现需要通过的单个测试。你应该首先尝试使用此数据结构,然后再观看我的实现和审计视频,以便你了解该过程。 警告 这些都不是数据结构的高效实现。...如果你在行业工作中尝试使用这些数据结构,就会有性能问题。 描述 在面向对象语言(如 Python)中处理许多数据结构,你需要理解三个常见概念: “节点”,通常是数据结构的容器或存储单元。...测试 现在要向你提供测试,实现这个类,你必须使其能够工作。你会看到我已经遍历了每一个操作,并试图覆盖大部分的边界情况,但是当我进行审计时,你会发现实际上可能错过了一些。...建议当你尝试在SingleLinkeList中实现一个函数,首先写一些注释来描述做了什么,然后填充 Python 代码来使这些注释工作。你会看到我在视频中这样做。...当你花了一两个 45 分钟的会话来 Hack 并试图让工作,现在是观看视频的时候了。你首先需要尝试,以便更好地了解正在尝试的事情,这样可以使视频更容易理解。

40420

任意密码重置漏洞,复制密码重置链接漏洞的赏金就几千美金

当我们点击那个按钮,一个请求被发送到服务器,要求该用户的重置密码链接,服务器响应该链接,然后该链接被复制到我们的剪贴板中。 区别 您一定在想这个功能和普通的重置密码功能有什么区别?...方法 记下了一些认为可能有帮助的事情,即某些用户(包括受邀用户和非受邀用户)的用户 ID 以及当我们单击复制密码重置链接请求。...但是当我打开链接,输入新密码并点击提交显示了一个错误。 4. 本来还高兴了几分钟,现在显示错误。所以我认为他们有一些实现可以防止这种情况发生。...但在这里所做的是尝试使用旧密码登录受害者帐户……而且实际上向我显示了错误的密码。 立即输入在链接中使用的新密码,登录成功。那么究竟发生了什么?...该组织立即实施了必要的修复,并告诉等待,因为他们也在进行其他一些主要修复。他们根据他们的赏金等级奖励了2000美金 提示和要点:有时即使出现错误,也要始终重新验证您尝试进行的更改。

26320

如何对Pod内容器进行remote debug(增补篇)

这篇之前发过,但在回答网友问题的过程中,意识到作为 SOP ,原篇里有些没有重点强调的步骤其实对大家能否成功搭建 remote debug 环境非常重要,例如 livenessProbe,因为,不少同学的调试会话突然中断了...把文章重新编排整理了一下,并修复了原篇一些问题。 正文分隔符 在一个面试场景中,就 debug 问题,一般会出现下面的对话: 二哥:你平时开发的时候是用什么方法 debug ?...先不谈通过看 log 来 debug 的效率问题,在 VM 上这样搞尚且可行,可当我们把应用容器化并让 K8s 管理后,怎么办呢?...这个 dummy probe 不需要真的去 probe container 是否活着,相反永远返回 true 。...我们来看看这个时候 K8s port-forward 会打印出什么来: 图 7:K8s port-forward 正在工作示意图 非常不错,看起来收到了请求,并且也在勤奋地工作着。

67720

一文看懂|分布式系统之CAP理论

能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱,我们可以依据 CAP 去否决。...C:数据一致性 什么是数据一致性?咋一看真的很让人糊涂,一致性是什么?是指数据能一起变化,是能让数据整齐划一。 那么问题又来了,数据何时会变化?数据怎么才能被称为一起变化?...而数据更新请求则仅包括数据的增、删、改这三种请求,而这三种请求又被统称为写请求。所以,数据只有在写请求的时候才会发生变化。 那我们来回答第二个问题,数据怎么才能被称为一起变化了?...如果系统内部发生了问题从而导致系统的节点无法发生一致性变化会怎么样呢?当我们这样做的时候,就意味着想看到最新数据的读请求们,很可能会看到旧数据,或者说获取到不同版本的数据。...而这些可见性往往代表的是读请求返回数据的可见性。 那么问题来了,当我们要求读数据的可见性的时候,对写数据有什么要求吗?

25.6K3727

来瞧瞧阿里一面都面些什么(二)

他已经过了3面了 估计还有2面就能过了,同时也说明,我们这些渣渣本科,只要好好学习,也还是有机会的,然后就借此把的面试题要过来了,然后自己尝试的去回答一下, 算是一个复习吧。...的回答 Tips 这个就是自己还原一下场景,然后当我自己是在被面试,看看自己会怎么去回答这些问题,看看自己的不足,其实读者也可以去尝试一下,算是一个查漏补缺吧 线程的几种状态?哪些状态有锁。...只有当父类加载器无法加载这个请求,子加载器才会尝试自己去加载。...,方便这个线程下次去竞争锁,然后进入到一个循环等待的过程,每次收到通知的时候,会判断一下自己是不是超过最大时间了,如果超过了就直接返回锁失败,如果获取锁返回为0,去尝试加锁,当加锁成功会返回null...等等 结尾 上面是自己一边看题目一边想的回答,估计真实面试场景的话,可能最好结合自己的项目来说吧,量化自己项目的指标可能会好点,比如多少的qps,然后TB级别的数据你是怎么处理的,然后怎么的,哈哈。

28120

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券