提问人:Amadeus Bojiuc 提问时间:11/13/2023 最后编辑:Daniel A. WhiteAmadeus Bojiuc 更新时间:11/13/2023 访问量:69
Visual Studio C++ 有没有更快的方法来设置断点值?
Visual Studio C++ is there a faster way to set breakpoint values?
问:
每次命中断点时,我都需要输入一个特定的变量值,但是手动输入非常耗时,有没有更快的方法?代码无法修改。理想情况下,最好有另一个 Visual Studio 应用可以将值提供给另一个 Visual Studio C++ 局部变量窗口。解决这个问题的最简单方法是什么?
答:
0赞
Clifford
11/13/2023
#1
使用调试器断点操作功能。操作对话框建议它只能用于在输出窗口中打印消息,但会计算两者之间的任何表达式,因此它可用于强制变量或调用函数。{...}
例:
在这种情况下,此处 when 设置为 99990 以在循环中向前跳。i == 10
i
我尝试将它与断点条件结合使用,但无法让它以我预期的方式工作;YMMV。
您可以通过调用操作表达式中的函数来执行更复杂的操作。例如,给定一个函数:
int test( int i )
{
return i == 10 ? 99990 : i;
}
因此,您可以从操作表达式中调用它:.在本例中,它只执行前面的示例,但演示了可以调用函数。当然,该功能可以做更多的事情。{i=test(i)}
如果要将一系列测试值注入变量,则可以使用一个操作表达式:where 是您编写并链接到被测代码的函数。例如,它可能会从文件中读取一系列值。{i = getTestData()}
getTestData()
当然,您的测试函数需要在断点站点的范围内,这通常需要修改代码以包含标头、原型或实际函数。这可以通过使用强制包含来避免。
然后,所有测试激励文件都可以位于单独链接的模块中,并且代码本身不需要修改即可进行测试。
请注意,在频繁调用时,命中断点以评估操作表达式并继续操作会显著减慢执行速度。
评论
0赞
Clifford
11/13/2023
@AmadeusBojiuc 不客气,但请看 stackoverflow.com/help/someone-answers。特别是最后一段。无需感谢、点赞或接受,感激地收到;-)。
0赞
Amadeus Bojiuc
11/13/2023
是否有可能有类似 { i == Convert.Int32(File.ReadAllText(some path...))} 的东西?
0赞
Clifford
11/13/2023
@AmadeusBojiuc我不知道。这是 .NET 调用吗?建议使用 C++/CLI?我从来没有用过它。但正如我在编辑中发布的那样,您可以调用一个简单的函数接口来执行更复杂的操作,我建议这样做。比设置复杂的操作表达式更易于维护 - 它们可以签入到您的版本控制系统中,并且比项目 XML 文件更容易管理。
0赞
Clifford
11/13/2023
@AmadeusBojiuc......但不是,这是一个布尔表达式,而不是赋值。==
评论