在Visual Studio的即时窗口中访问'cmath'函数

3

在使用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头文件,并在代码中使用了sinasincosacosatan2sqrt函数。但是怎样才能在立即窗口中使用这些函数呢?我在谷歌上搜索了我的问题,并发现有人在2005年提出了这个请求,同时也找到了使用成员函数的示例。


我对VS不是很了解,所以这只是一个猜测,但由于cmath在命名空间std中具有其功能,因此std::sin(alpha)是否有效? - us2012
如果我在即时窗口中输入std::sin(alpha),我会得到CXX0017错误:找不到符号“std::sin”。 - Matt
2个回答

2
听起来好像直接不支持: 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://dev59.com/7k7Sa4cB1Zd3GeqP2lfw#3032271 希望能对你有所帮助。

这是一个正确的答案。我只需要找到具有所需函数的dll。你有什么想法吗?当我查看已加载的模块时,我看到了ntdll.dll、kernel32.dll、KernelBase.dll、msvcp100d.dll和mscvr100d.dll。所有的都直接失败,除了msvcr100d.dll,它将接受{,,msvcr100d}sin()并返回<void>。如果我尝试使用数字,例如{,,msvcr100d}sin(0.786),它会返回错误:参数列表与函数不匹配。我知道从math.h中实际调用的是sinl(_X)。然而,msvcr100d没有该符号。我错过了什么? - Matt
我不知道。昨天我试图获取sqrt。你可能需要为dll使用符号,并正确获取编译器修饰。(我的最终目标是从.natvis文件中使sqrt工作,但我可能会放弃这个想法。)我想,如果万不得已,你可以构建自己的dll并公开mySine和myCosine,但是很痛苦。一位同事说,你应该能够设置断点并在反汇编中逐步执行内置函数,并查看调用堆栈以获取混淆名称。在尝试之前,我分心了。 - Jay Carlton

0

在 Visual Studio 即时窗口中,只有一些导出的 DLL 函数能够正常工作。例如 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接