logpoint日志只输出到debug console,需用ctrl+shift+y(win/linux)或cmd+shift+y(mac)手动打开;必须是橙色菱形图标才为日志断点,红色圆点为普通断点;日志模板仅支持无副作用的纯表达式求值,且作用域限于断点所在行。

日志断点不输出,先看 Debug Console 是否打开
Logpoint 的日志默认只往 Debug Console 输出,不是终端、不是 Output 面板、也不是浏览器控制台。如果它被最小化或关闭,日志就“凭空消失”。快捷键 Ctrl+Shift+Y(Windows/Linux)或 Cmd+Shift+Y(Mac)必须手动按一次打开,否则无论怎么写插值都看不到任何内容。
常见现象:打了 Logpoint,程序照常跑完,Debug Console 空空如也。这时别急着改表达式,先确认这个面板是否可见、是否有焦点。
Logpoint 图标必须是橙色菱形,不是红色圆点
VSCode 里红色实心圆点是普通断点(暂停用),橙色菱形才是日志断点(输出用)。右键断点时,如果看到的是「Edit Breakpoint」,说明你设的是普通断点;必须选「Edit Log Point」才能启用日志功能。
容易误操作的点:
- 在已有红色断点上右键 → 选错菜单项,结果只是加了条件,没转成日志点
- 误以为“编辑断点”就能写日志模板,其实模板栏只在 Logpoint 模式下出现
- 图标颜色不对但没注意——灰色菱形表示该 Logpoint 被禁用,需右键启用
日志模板里的表达式必须安全可求值
Logpoint 不是 eval(),它只支持无副作用的纯表达式求值。调试器会在断点行当前作用域内尝试计算大括号里的内容,失败则静默显示 undefined,不报错也不提醒。
合法写法示例:
Batch {batch_idx}: loss = {loss:.3f}、User {user?.id ?? "guest"}、{new Date().toISOString()}
典型错误:
-
{model.forward(x)}—— 模型调用可能耗时、OOM 或抛异常,调试器不保证执行环境完整 -
{os.getcwd()}—— 系统调用被禁止,会提示Expression evaluation error -
{print(x)}或{x += 1}—— 语句非法,Logpoint 直接忽略整个插值 -
{data[100]}—— 若data是空列表,结果为undefined,但不会崩溃也不会提示越界
条件 + 日志混用时,条件判断优先于插值求值
你可以同时设置条件表达式和日志模板,但触发逻辑是:先判断条件是否为真,为真才执行插值并输出日志。这意味着插值表达式里的变量必须在条件判断时就已存在且可访问。
正确组合:
Expression: loss > 0.5,Log Message: High loss: {loss:.4f}
错误假设:
Expression: {loss} > 0.5 —— {loss} 是 Logpoint 插值语法,不能出现在条件字段里;条件框只接受裸表达式,不支持插值符号
一个容易被忽略的细节:Logpoint 的插值作用域严格限定在断点所在行的局部作用域。比如你在函数开头打 Logpoint,却想引用函数末尾才定义的变量 result,它就是 undefined——不是 bug,是设计如此。











