我将在类库中使用#if DEBUG指令.已编译的ClassLibrary.dll将在单独的Application.exe中使用.
我的调试代码是否会在以下情况下执行?
我正在研究标准 C++ 程序的故障转储。
我在使用以下代码时遇到问题:
_variant_t* pvarTemp;
pvarTemp = <static_cast><_variant_t*> (pointer_array->GetAt(i));
if (!pvarTemp) continue;
pvarTemp->Clear();
Run Code Online (Sandbox Code Playgroud)
由于我推测内存出了问题,我决定查看一下内存窗口(菜单“调试”、“Windows”、“内存”、“内存 1”),我在其中输入了 的内存地址pvarTemp,但我只看到了一些问号。
故障转储本身只是一个小的故障转储,结果如下PYKD(targetSystem().desc在 Windgb 中):
0:049> !py
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> print targetSystem().desc
User mini dump: C:\Temp_Folder\CRASH.DMP
Run Code Online (Sandbox Code Playgroud)
我的问题是:问号的原因是什么?
两者哪一个是正确的?
我正在用c#和vs2022测试一段代码,但遇到一些问题。我尝试跟踪类中某些成员的值,但 VS2022 显示错误 CS0103。所以我想知道为什么VS2022不能表现出他们的价值观,因为他们肯定是在这个背景下。
class Program
{
static void Main(string[] args)
{
ProtoType p = new ProtoType(100, 200);
p.x = 101;
p.y = 20;
int cnt = p.list.Count;
Console.ReadLine();
}
}
class ProtoType
{
public int x = 0;
public int y = 0;
public List<string> list = new List<string>();
public ProtoType(int x, int y)
{
Console.WriteLine("Execute Constructor ProtoType()");
this.x = x;
this.y = y;
}
public ProtoType Clone()
{
Console.WriteLine("Execute ProtoType.Clone()");
return (ProtoType)this.MemberwiseClone();
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Visual Studio 中有一个以前的 MFC 应用程序,它在调试时在应用程序对话框中显示各种工具栏和停靠窗口(特别是带有“生成”、“调试”和“查找”选项卡的“输出”窗口)。
上面的应用程序被创建为CFormView.
在新的 MFC 应用程序(创建为CDialogEx)中,我无法显示相同的工具栏和停靠窗口,并且无法在 Visual Studio 中进行任何设置来启用它们。知道在哪里可以找到 MFC 应用程序对话框的此类设置吗?CFormView也许这只是和之间的区别CDialogEx?
在C ++项目上工作时,我发现VS19输出非常无用。考虑在新安装的VS19上运行示例代码:
#include <iostream>
using namespace std;
class My
{
public:
void f() noexcept
{
throw exception{"A problem sir!"};
}
};
int main()
{
try
{
My m;
m.f();
}
catch (exception& ex)
{
cout << "exception caught! " << ex.what() << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望收到的是:“函数在标记为noexcept时抛出异常”,并且将光标设置在有问题的行上。我得到的是一个带有一些常规文本的新窗口,没有一个提到问题或问题所在。
我有一个名为“debugger”的小型命令行应用程序,它充当进程 A 的调试器。现在该应用程序可以在 x86 和 x64 上正常工作。现在我必须将这个“调试器”迁移到ARM64架构。这个调试器非常简单地做的就是将断点(又名写入指令 int3(0xcc))附加到它在进程 A 的映射文件中找到的函数的开头。现在,每当我尝试通过这个“调试器”应用程序运行我的应用程序时,我都可以设置断点,但应用程序不断出现“access_violation”并严重崩溃。我的预感是,对于 ARM64 架构,我写入函数开头的指令“0xcc”会导致 access_violation。我尝试过使用指令“0x150”、“0xF000”而不是“0xcc”。欲了解更多信息,请参阅我之前的问题。
为了确保这是唯一的问题,我希望添加一条不会以任何方式影响代码执行的指令,以便我可以确认唯一的问题是我在调试器代码中作为断点编写的指令。请帮助我缩小问题范围,并提供所有答案的链接。
一个例子是这个代码:
try
{
string domain = o.SelectToken("response[" + i + "].domain").ToString();
...
}
catch(Exception)
{
continue;
}
Run Code Online (Sandbox Code Playgroud)
vs 停止并指向string domain = o.SelectToken("response[" + i + "].domain").ToString();for an ,而不是在循环中继续(“继续”)System.IndexOutOfRangeException。
这是为什么?
我有一点简单的逻辑.
int i = 0;
if (i < 0) {
//whatever;
}
Run Code Online (Sandbox Code Playgroud)
当我使用VS调试时,我看到i设置为0但是if评估为false!怎么会这样?
GUYS.也许我可以更好地措辞!上面的表达式应该在我为0时评估为假,当我在VS中将鼠标悬停在它上面时,它会进入括号并执行"无论什么"......这是不正确的.
编辑:请参阅我的同名但最近的问题解决方案.