Visual Studio 的断点系统远不止”在代码行上点击左侧边栏”那么简单。掌握其高级功能可以彻底改变你的调试体验,让你能精准定位问题,而不是在无尽的代码执行中盲目搜索。本文将带你全面了解 Visual Studio 断点系统的各项高级功能。
条件断点
条件断点允许你设置特定条件,只有满足这些条件时调试器才会暂停。
支持如下格式的表达式:
1 | // 基本条件 |
支持的内置函数如下:
- strlen(str):获取字符串长度
- strcmp(str1, str2):比较两个字符串
- strncmp(str1, str2, n):比较前n个字符
- strstr(haystack, needle):查找子字符串
- GetLastError():获取系统错误代码
断点筛选器
当调试多线程或分布式应用时,筛选器能确保断点只在特定环境中触发。
支持如下筛选字段:
- MachineName
- ProcessId
- ProcessName
- ThreadId
- ThreadName
1 | ThreadId = 1234 |
筛选器的逻辑运算与条件断点有些不一样,逻辑等号使用=,逻辑与使用&,逻辑或使用||,逻辑非使用!,没有不等号。
示例:
1 | MachineName = "MyPC" |
跟踪器
在“断点”中选择“操作”,输入跟踪指令即可,通常,为了不影响程序执行流,建议同时勾选 “继续执行”,这样程序运行到此处时就不会中断,而是直接输出信息后继续运行。
支持如下格式的指令:
直接输入字符串,例如 “循环到了这里”。
使用变量名,用大括号 {}括起来,例如 “当前 i 的值为: {i}”。输出时,{i}会被替换为变量 i的实际值。
使用一些预定义的关键字(以 $开头),例如:
1
2
3
4
5$ADDRESS- 当前指令地址
$CALLER- 调用当前函数的函数名称
$FUNCTION- 当前函数名称
$TID- 当前线程 ID
$PID- 当前进程 ID