高级Visual Studio功夫的试验调职能从窗口期间的调试
-
26-09-2019 - |
题
我看到一些相关的问题已经问过,但他们是不是太先进了我掌握的或缺乏一步一步的指导,从开始到结束(最终被内幕交谈,他们自己的实验结果)。确定这就是,鉴于这个简单的程序:
#include <stdio.h>
#include <string.h>
int main()
{
FILE * f;
char buffer[100];
memset(buffer, 0, 100);
fun();
f = fopen("main.cpp", "r");
fread(buffer, 1, 99, f);
printf(buffer);
fclose(f);
return 0;
}
什么,它基本上是印刷本身(假设的文件名 main.cpp
).
的问题
我怎么可以拥有它打印另一个文件,说 foobar.txt
无需修改源码?它有什么用运行,它通过VS是,加强通过的职能和劫持文件指针的权利之前 fread()
被称为。没有必要担心泄漏通过调用资源 fclose()
.
我尝试简单 f = fopen("foobar.txt", "r")
这给了
CXX0017: Error: symbol "fopen" not found
任何想法?
编辑
我发现出的解决方案的意外上 调试Mozilla在Windows常见问题.正确命令投入立即窗口
f = {,,MSVCR100D}fopen("foo.txt", "r")
然而,它并没有真正回答这个问题:
- 我还是不明白什么会在这里。
- 如何有系统地找出
{,,MSVCR100D}
部分对于任何给定的方法?我知道MSVCR版本的变化。我怎么发现的? - 任何人都可以解释的大括号法,特别是那些是什么两个逗号做的吗?还有更多隐藏的宝石,使用这种语法?
其他提示
补充地平线公司的良好答案,这是一种方法,我发现,有系统地找出哪些模块的功能呼叫。(即的 MSVCR100D
部分)。
- 步骤通过调试寻找一个实例功能你想要呼叫。(在这种情况下,我一直在寻找
fopen
); - 当你找到它,它通过按F11。
- 右击和选择显示的拆卸
- 你可以找到地址的当前执行的指令。(击周围的观察选项,以切换如果不是所示)
- 开调试模块窗口(Alt-按Ctrl+U)
- 看起来通过的清单的装模块的地址范围涵盖目前指示的地址。Bam,你已经找到了该模块的名称。
我相信你可以用这种方法找到模块名为任何类。这可能是有用的,当例如你是审查一个大型代码基地和你想要援引一些任意的类的方法在飞行中的"即时"窗口。你可能也创建类的实例的飞行通过调用的构造自己。
现在不是用C++一的母语?我们几乎觉得就像在一个管理、脚本的环境在这里:P
不隶属于 StackOverflow