在 Visual Studio 的即时窗口中访问“cmath”函数
Posted
技术标签:
【中文标题】在 Visual Studio 的即时窗口中访问“cmath”函数【英文标题】:Accessing 'cmath' functions in the Immediate Window of Visual Studio 【发布时间】:2013-09-24 21:25:00 【问题描述】:在使用调试器的 Visual Studio 2010 Express 中,我可以输入如下成员函数:
?visc(alpha,i)
8.2814899360436612e-005
?get_sign()
0.91513417241239037
进入即时窗口,它们工作正常。 但是,如果我尝试:
?sin(alpha)
?math.sin(alpha)
?cmath.sin(alpha)
我得到Error: symbol "math" not found
等等。我在主文件中包含了 cmath.h,并在整个代码中使用了sin
、asin
、cos
、acos
、atan2
和 sqrt
。如何在即时窗口中获得这些功能?我在 Google 上搜索了我的问题,并找到了 2005 年添加此问题的请求以及使用成员函数的示例。
【问题讨论】:
我对VS不太了解,所以这是一个疯狂的猜测,但是由于cmath
在命名空间std中有它的功能,那么std::sin(alpha)
是否有效?
如果我在即时窗口中输入 std::sin(alpha) 我得到 CXX0017: Error: symbol "std::sin" not found.
【参考方案1】:
不直接支持这样的声音: http://connect.microsoft.com/VisualStudio/feedback/details/283279/add-simple-maths-function-support-to-debugger-exp-sin-cos-sqrt
我想如果你知道正确的 dll,你可以使用刚刚记录的上下文运算符来获取它(这是我本周第二次遇到这个人的博客): http://thetweaker.wordpress.com/2009/05/30/breaking-on-system-functions-with-the-context-operator/
类似问题的答案: https://***.com/a/3032271/611672
希望这会有所帮助。
【讨论】:
所以这是一个正确的答案。我只需要找到具有我需要的功能的dll。任何想法如何做到这一点?当我查看加载的模块时,我看到了 ntdll.dll、kernel32.dll、KernelBase.dll、msvcp100d.dll 和 mscvr100d.dll。除了 msvcr100d.dll 将采用 ,,msvcr100dsin() 并返回只有部分导出的 dll 函数在 Visual Studio 即时窗口中运行。一些最常见的函数,如 sin、cos、pow、exp 不起作用。以下是 Visual Studio 2012 中一些经过测试的工作功能:
msvcp110d.dll!log(2.0)
0.69314718055994529
msvcr110d.dll!sqrt(2.0)
1.4142135623730951
msvcr110d.dll!_hypot(-2.0,1.0)
2.2360679774997898
msvcr110d.dll!_logb(-2.0)
1.0000000000000000
msvcr110d.dll!abs(-2.0)
2.0000000000000000
msvcr110d.dll!acos(-2.0)
-1.#IND000000000000
msvcr110d.dll!cosh(1)
1.5430806348152437
msvcr110d.dll!fabs(1)
1.0000000000000000
【讨论】:
以上是关于在 Visual Studio 的即时窗口中访问“cmath”函数的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2008/10 的即时窗口中的“搜索内存”是不是损坏?
如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]
Visual Studio 即时窗口 - 不允许使用 Lambda 表达式 - 是不是有解决方法或替代方法? [关闭]
立即窗口 VIsual studio 调试 undefined