要是在日志中记录了这个异常的 traceback 信息就好了。 本文就分享一下两个方法,记录异常的 traceback 信息。...方法一:使用 logger.exception logger.exception 方法可以将异常的 traceback 信息记录到日志里,这里有一个小小的例子: import logging logging.basicConfig...Exception as e: logger.exception("some message") 方法二:使用标准库 traceback 导入标准库 traceback 后,我们还可以这样来记录异常的详细信息...其中 traceback.format_exc 打印的就是异常的详细信息。...最后的话 本文分享了日志记录异常的方法。
::: Immer 使得在 React 中使用不可变数据更加容易,通过提供简洁的 API 和直观的语法,以可变的方式更新不可变数据。...我们使用 produce 函数将状态更新的逻辑放在一个回调函数中,然后将回调函数传递给 setState。...Immer 会在回调函数中提供一个名为 draft 的草稿对象, 我们可以直接对该对象进行更改,而不用担心原始对象被修改。...Immer 会根据我们的更改生成一个新的不可变对象,并将其作为新的状态进行更新。...它接收当前状态 state 和表示要进行的更改操作的回调函数。我们可以在回调函数中对 draft 对象进行更改,Immer 会自动处理状态的更新。
一个用于将 immer 作为 React hook 来操纵状态的 hook。 use-immer 可以将 state 数据 immutable,更新深层嵌套数据更为方便,且有函数编程的感觉。...烦不胜烦的 modal 在中台项目中,对一些列表的资源信息CRUD 弹窗是必不可少的,所以页面中table的管理必不可少,且很繁琐,容易混乱。起初我是这样 <ConfigModal ......在使用modal的页面中,我们只需不断去更新全局记录值,当modal关闭时只需全局记录值置为空即可。这样在当前的页面中不需要再将烦人的众多modal一次次的引入,也不需要维护一系列的visible。...问题来了,那如全局记录值modal呢?...我们自定义了 useActionCallback, 它接收列举所有 modal 的回调函数 fn,fn 根据传入的参数确定具体的 modal。
表单状态甚至可以具有嵌套信息,例如用户的地址信息,它具有子字段,例如address.addressLine1,address.addressLine2等。...但是,现在reducer更新参数中如果有回调函数,则不能基于当前状态计算新状态,因为当前state没有传递给回调函数作为参数。就像我们在useState一样: ?...useState中的更新函数可以基于prev参数计算新状态 另外,如何更新嵌套状态如address.addressLine1,address.pinCode。...2:对象具有_path和_value属性 - 当使用具有这两个属性的对象作为参数,调用更新回调函数时。我们将此视为一种特殊情况,其中_path表示嵌套的字段路径。...immer中的produce函数将对象作为其第一个参数进行处理,在我们的例子中是当前状态,它的第二个参数是一个函数,它接收对象的草稿副本以进行mutate,无论你在这个函数内修改了什么草稿状态,是在副本上完成的
这样的设计带来了3大好处: 数据结构透明 limu是当下唯一一个可实时查看草稿的数据结构的不可变操作库,调试友好。...优化过程 在3.12之前,limu虽然性能已超过immer数倍,但离structura、mutative这些新起的不可变数据操作库还有不少差距,故只能把调试友好、比immer快几倍来作为宣传点,如需追求极致的速度还是默认推荐了...放置meta 开文我们提到了meta数据隐藏这个点,meta数据记录这当前节点的代理对象,父亲、孩子、可触达路径、数据版本号等重要信息,为了让用户不感知到这个数据的存在,先后做了2种尝试 symbol藏匿...除了性能优异以外,limu的数据是可实时查看的,深度展开后就是json而非Proxy,面向调试非常友好,如对性能有极致追求且不考虑非Proxy环境的兼容,limu将会是你的最佳选择,和immer保持了对等的...api设计,如没有用到immer的applyPatches相关api,可实现无感平替。
今天我们来聊聊 ahooks 中那些可以帮助我们更优雅管理我们 state(状态)的那些 hook。...我们知道,React Function Components 中的 State 是不可变数据。...window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。...该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。 假如你的操作是比较频繁的,就可以通过这个 hook 进行性能优化。...; }); return [state, setRafState] as const; } useSafeState 用法与 React.useState 完全一样,但是在组件卸载后异步回调内的
中间件支持 Zustand 支持大量的中间件,如 Immer、Redux 中间件等,这使得开发者可以根据需要轻松地扩展 Zustand 的功能。...此外,Zustand 还提供了一些内置的调试功能,如 useDebugValue 钩子,可以帮助开发者更好地理解状态的变化。 7....这个功能对于那些需要持久保存用户操作的场景非常有用,比如表单数据、用户偏好设置等。...whitelist: ['theme'], // 只持久化 theme 状态 blacklist: [], // 不持久化任何状态 debug: false, // 是否在控制台输出调试信息...debug: 一个布尔值,如果设置为 true,则会在控制台输出额外的调试信息。 自定义持久化中间件 如果你需要更细粒度的控制或者想要创建自己的持久化逻辑,你可以通过创建自定义中间件来实现。
工具库 在编写 react + redux 应用时,reducer 中的 state 如果是一个引用类型,比如数组或者对象,当往数组中 push 新的项时,我们必须要克隆一份才行,如果不克隆,react...immer 库就是为了解决这个问题的。它是 mbox 库的作者的另一个作品,与 mobx 一样简单易用。...it"}) draftState[1].done = true }) produce 函数接收原始的 state 数据,它会把这个数据深度克隆,然后把克隆后的 state 传递给回调函数,我们在回调函数里就可以进行...),在使用时,也应设置如 type、name 等属性。...") .max(200, "无效的年龄") }); 上面的汉字内容都是当验证不通过时,提醒用户的信息,这些信息会映射到 ErrorMessage 组件中,然后展示出来。
本周精读的仓库是 immer。 1 引言 Immer 是最近火起来的一个项目,由 Mobx 作者 Mweststrate 研发。...别扭的 setState 我们都知道,react 框架中,setState 支持函数式写法: this.setState(state => ({ ...state, isShow: true }...生成代理 第一步,也就是将 obj 转为 draft 这一步,为了提高 Immutable 运行效率,我们需要一些额外信息,因此将 obj 封装成一个包含额外信息的代理对象: { modified,...getter produce 回调函数中包含了用户的 mutable 代码。所以现在入口变成了 getter 与 setter。...同时,如果代码中只访问了 draft.a,那么只会在内存生成 draftA 代理,b c 属性因为没有访问,因此不需要浪费资源生成代理 draftB draftC。
复杂对象的更新 在组件中,工单的所有参数都保存在一个对象中,像这样 const [formConfig,setFormConfig] = useState( { type: ''...: 我们不得不写很多操作修改以外的代码 每深入对象一层,扩展语法后的路径也需要再进一层(如 ...prevState) ,在复制粘贴过程中极易弄错弄丢 由于工单的所有参数可配置,组件里面到处都充斥着这样的代码...,以及一个修改传入状态的函数,在修改状态的函数中,所有标准的JavaScriptAPI都可以用于draft(草稿)对象,然后返回一个新的状态,但是原始的状态不会受到影响。...setState的时候都需要配合使用一次produce函数很冗余,没关系,Immer也有对应的React Hook方法 将produce封装到useState中的useImmer import React...Immer的使用方法,希望对你有用,当然,如果可以的话不妨点个赞再走呢,这对我很重要。
因为这个库的交互特性,这个功能在你写的 Web 程序中没多大用处,但是当你写的脚本被用在命令行中时非常有用。...这一套功能是不是就非常有意思了,我们可以记录客户的所有命令操作,不管是安全审查还是事件回放,都非常有用。...,当在交互式命令行模式下,也就是 readline 函数调用时,按下 Tab 键的时候,就会进入到这个函数的回调函数中。...readline_callback_handler_install() 函数的功能是初始化一个 readline 回调接口,然后终端输出提示信息并立即返回,如果在回调函数中不进行什么操作的话,这个函数就只是输出一个提示就结束了...最后执行的结果就是注释中的内容,大家也可以自己复制下代码后运行调试,只有自己进行过的调试才能理解的更加深入。 总结 Readline 很强大,而且也是 PHP 默认安装包中自带的扩展。
所以在React源码中,所有用户代码都被包裹在一个方法中执行。...这不,有人提issue: 你们这样在try catch中执行用户代码会让浏览器调试工具的Pause on exceptions失效。...如何让代码执行不中断 答案是:通过dispatchEvent触发事件回调,在回调中调用用户代码。...通过dispatchEvent触发的事件是同步触发,并且在事件回调中抛出的错误不会影响dispatchEvent的调用者(caller)。 让我们继续改造wrapperDev。...在事件回调中调用用户代码。
时,Redux Toolkit会自动将它添加到store的reducer对象中,无需手动合并。...Code Splitting如果你的应用很大,可以考虑将不同的状态切片分散到多个文件中,然后在需要的时候按需加载,实现代码分割。...Performance MonitoringRedux Toolkit与Redux DevTools扩展配合使用,可以方便地监控应用的状态变化,包括时间旅行、快照对比等,这对于调试和优化性能非常有用。...Error Handling你可以通过createAsyncThunk的第二参数来捕获和处理异步操作中的错误,这有助于提供更好的用户体验。...在实际开发中,不断学习和探索,找到最适合你项目需求的方法,是提升开发效率的关键。
,另一边在这些变量改变后,执行回调函数。...所以 callback 函数中用到的变量被记录了下来,当变量更改时,会触发 new Reaction 的回调,又重新收集一轮依赖,同时执行了 callback。...这样就实现了回调函数用到的变量被改变后,重新执行这个回调函数,这就是 observe。 为什么依赖追踪只支持同步函数 依赖收集无法得到触发时的环境信息。...数据流框架的 Debug 分为数据层和 UI 层,顺序是 dob 核心记录 debug 信息 -> dob-devtools 读取再加工,强化 UI 信息。...通过精心定义的一系列事件,制造出一个具有生命周期的工具库! 在所有 getter setter 节点抛出相关信息,Debug 端订阅这些事件,找到对自己有用的,记录下来。
文件基本信息如下: ? VirusTotal上的该样本信息: ? 病毒名大多为VBKrypt或者VBInject。 0x02 行为监控 ?...FormLoad中没有什么有用的信息,直接断到FormPaint。 ? 这里做了一些字符串的操作,直接自动步过,然后来到下面这个call: ?...调用了EnumWindows,这个函数一个参数是回调函数,所以需要留意。...函数原型: BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam ); lpEnumFunc是指向回调函数的指针,lParam是传递给回调函数的参数...fs:esi指向自身(TEB结构),偏移为3的地址处是BeingDebugged, 0x01是被调试中: ? ? nop掉保存再调试。
date-fns: 时间格式化 day: 时间格式化 decimal: 数字格式化 fastscan: 敏感词过滤 fuzzy: 模糊搜索 globalize: 时间格式化 iconv-lite: 字符编码转换 immer...函数式编程 sugar: 函数集合 tapable: 钩子函数 underscore: 函数集合 utility: 函数集合 validate: 类型验证 voca: 文本格式化 网络 async: 异步回调...eruda: 移动端调试面板 spy-debugger: 移动端调试面板 vconsole: 移动端调试面板 后端类库工具 命令 clear: 清屏 commander: 命令配置 cross-env...debug: 调试日志 dumper: 节点检查 ndb: Chrome调试 结语 写到最后总结得差不多了,后续如果我想起还有哪些类库工具遗漏的,会继续在这篇文章上补全,同时也希望各位倔友对文章里的要点进行补充或者提出自己的见解...欢迎在下方进行评论或补充喔,喜欢的点个赞或收个藏,保证你在开发时用得上。
Q-92:列出一些用于调试 Python 程序的 PDB 命令? Q-93:调试 Python 程序的命令是什么? Q-94:你如何在 Python 中监控程序的代码流?...Python 中的 globals() 函数将当前全局符号表作为字典对象返回。 Python 维护一个符号表来保存有关程序的所有必要信息。此信息包括程序使用的变量、方法和类的名称。...在 Python 中,我们可以使用 sys 模块的settrace() 方法来设置跟踪挂钩并监视程序内部的函数。 您需要定义一个跟踪回调方法并将其传递给settrace() 函数。...回调应指定三个参数,如下所示。 import sys def trace_calls(frame, event, arg): # 'call' 事件发生在函数执行之前。...当我们不想要所有结果并希望推迟一段时间时,生成器很有用。 我们可以用生成器代替回调函数,而不是使用回调函数。我们可以在函数内部编写一个循环,做与回调相同的事情,并将它变成一个生成器。
,会调用该回调函数,用户即可收集所需的信息了,同时内核最后还会回到原本的正常执行流程。...其中涉及硬件架构相关的是CPU的异常处理和单步调试技术,前者用于让程序的执行流程陷入到用户注册的回调函数中去,而后者则用于单步执行被探测点指令,因此并不是所有的架构均支持,目前kprobes技术已经支持多种架构...结构体中的触发探测器之前寄存器信息。...因此kprobes可以被用来安装bug修复代码或者注入故障测试代码; kprobes会避免在处理探测点函数时再次调用另一个探测点的回调函数,例如在printk()函数上注册了探测点,则在它的回调函数中可能再次调用...因此不论在何种情况下,在回调函数中不要调用会放弃CPU的函数(如信号量、mutex锁等); kretprobe通过替换返回地址为预定义的trampoline的地址来实现,因此栈回溯和gcc内嵌函数__builtin_return_address
,方便开发调试,对实现“撤销”、“重做”这类的功能也更加方便。...函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产生的外部输出无关。 该函数不能有语义上可观察的函数副作用,诸如“触发事件”,使输出设备输出,或更改输出值以外物件的内容等。...简单总结一下,如果一个函数的返回结果只依赖他的参数,并且在执行过程中没有副作用,我们就把这个函数定义为纯函数。...,所以它们的 title 属性指向的对象是不同的, 使用一个树状结构来表示对象结构的话,结构如下如所示: 共享结构 现在的 reducer: reducers: { changeTitleTip...当然,除了 immer 之外,还有别的库也同样能解决我们的问题,但是 immer 应该是最简单也是最容易上手的一个库之一了。
**盒模型:**CSS中的盒模型描述了元素如何在页面上呈现,包括内容(content)、内边距(padding)、边框(border)和外边距(margin)。...4.如何解决 JavaScript 中的回调地狱(Callback Hell)?5.描述一下 JavaScript 的事件冒泡和捕获。...**回调地狱:**回调地狱是指嵌套过多的回调函数导致代码难以阅读和维护。可以使用Promise、async/await或事件库(如Event Emitter)来避免回调地狱。...2.如何在 React 中实现组件之间的通信?3.Angular 的依赖注入是如何工作的?4.你如何使用 jQuery 选择和操作 DOM?...初始化:使用git init命令在项目目录中初始化Git仓库。添加更改:使用git add命令将文件添加到暂存区。提交:使用git commit命令将暂存区的更改提交到本地仓库,并添加提交信息。
领取专属 10元无门槛券
手把手带您无忧上云