kiz*_*zx2 5 debugging runtime immediate-window visual-studio
我看到一些相关的问题已被提出,但它们要么太先进了,要么掌握或缺乏从头到尾的逐步指导(大多数人最终都在谈论他们自己的实验结果).好的,这是一个简单的程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
它的作用基本上是打印本身(假设文件名是main.cpp).
如何在foobar.txt 不修改源代码的情况下打印另一个文件?它与通过VS运行它,踩过函数并在fread()调用之前劫持FILE指针有关.无需担心通过呼叫泄漏资源fclose().
我想简单f = fopen("foobar.txt", "r")这给了
CXX0017: Error: symbol "fopen" not found
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在Windows FAQ上调试Mozilla时偶然发现了解决方案.放入立即窗口的正确命令是
f = {,,MSVCR100D}fopen("foo.txt", "r")
Run Code Online (Sandbox Code Playgroud)
但是,它并没有真正回答这个问题:
{,,MSVCR100D}任何给定方法的部分?我知道MSVCR版本在不同系统之间有所变化.我怎么能找到它?大括号语法是VS 上下文操作符,它主要被破坏 - 正如在链接中详细描述的那样(或者至少是一个隐藏的宝石).它用于VS表达式 - 评估引擎在运行时需要解析函数的任何位置,例如,在观察窗口中评估复合表达式,设置断点,或者(在您看到的情况下)在立即/命令窗口中.
它的第三个参数是二进制,它包括你想要调用的函数的实现.对于像fopen这样的CRT功能,通常相当于 -
MSVCR [VS版] [D] .dll
(我似乎记得扩展是必要的 - 但可能在VS2010中有所改变)."D"表示调试dll版本.VS版本号解码为:VS2005 - > 8,VS2008 - > 9,VS2010 - > 10.
另请注意,评估引擎还有其他各种需要注意的问题.
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |