C++ Visual Studio在断点处暂停(堆栈处)时报告错误的行
当我的程序到达断点时,Visual Studio将在堆栈下调用中报告错误的行。C++ Visual Studio在断点处暂停(堆栈处)时报告错误的行,c++,visual-studio-2015,breakpoints,visual-studio-debugging,C++,Visual Studio 2015,Breakpoints,Visual Studio Debugging,当我的程序到达断点时,Visual Studio将在堆栈下调用中报告错误的行。 (延迟约1次陈述) 这种情况并不总是发生,但在大多数地方都会发生。 有此问题的代码位置将始终有此问题 例子 Vector3::setValue()中有一个断点 当我在第25行调用setTransform()时,它将被间接命中:- //inside "doThat()" if(someValue){ auto physicObject=getObject(); if(somefunction()){
(延迟约1次陈述) 这种情况并不总是发生,但在大多数地方都会发生。
有此问题的代码位置将始终有此问题 例子
Vector3::setValue()中有一个断点
当我在第25行调用setTransform()
时,它将被间接命中:-
//inside "doThat()"
if(someValue){
auto physicObject=getObject();
if(somefunction()){
someFunction()
}else{
physicObject->setTransform(transform); //line 25 It should pause here. #A
}
}else{ //line 28 <----- VS reports that it pauses here #C
printSomeThing()
}
如果单击#C
,Visual Studio将突出显示#C
,因此我无法调查物理对象的值,因为物理对象
现在超出范围
我的解决方法
如果我真的想看物理对象
,我必须添加一个虚拟行#B
:-
}else{
physicObject->setTransform(transform); //line 25 #A
int dummy=42; //line 26 #B
}
堆栈将报告:-
System::doThat() (line 26) #B
我将能够观看物理对象
问题:
如何使VisualStudio报告堆栈位于正确的行
也有类似的问题,但我找不到任何与此问题完全匹配的问题。
(我已经定期搜索了几个月。)
请注意,我总是关闭optimization=off,并在调试模式下运行。
“全部重建”也无济于事。在“遍历”调用堆栈时,我注意到行标记通常在调用后的行中放置。这可能是因为这是根据调用实际发生的机器代码中的地址确定的下一个源代码行。如果您想更精确地查看,请将“显示”切换到“拆解”。我终于习惯了这种效果,只是忽略了它。(我几乎无法想象如何在没有其他令人烦恼的副作用的情况下做得更好,但这可能是由我有限的幻想造成的。)@Scheff很高兴知道我并不孤单,谢谢:)@javaLover,无论所有项目都有这个问题,还是只有一个具体的问题?如果您启用“异常设置”窗口,是否有抛出的异常消息?@Jack Zhai MSFT“只是特定的一条?”@javaLover,感谢您的回复,异常是我知道的可能原因,但如果仍然没有帮助,请您分享有关我如何使用简单示例重新处理此问题的详细代码。很抱歉,我无法使用您问题中的主代码创建此示例。
System::doThat() (line 26) #B