我正在寻找一种方法来阻止 Visual Studio 调试器在按 F11 时进入某些类和函数。或者阻止一些文件,这样 IDE 就不会打开它们,只需逐步执行(除非出现异常)。
我知道这听起来有点愚蠢,但我正在使用智能指针和其他辅助类,许多重载运算符,简单表达式由许多函数调用组成,在优化时消失,所以这不是速度问题,但它是一个调试问题,一直打开和关闭那么多文件,经历了很多函数,不小心留下了目标代码等等。
这是我正在谈论的例子:
stepToThisFunction(objectOfIgnoreClass->ignoreFunction());
当调试器在这一行时,按 F11 应该只输入 stepToThisFunction,单步执行 ignoreFunction() 或可能来自 objectOfIgnoreClass.
托管 DebuggerStepThrough 的某些 native 等效项。我不想使用 CLI。只是在函数/类之前写的关键字或宏。我还发现了一些东西,一些注册表项修改,但这似乎不是我要找的东西,或者我不明白它的机制(我什至不明白注册表项与此有什么关系) .此外,“放置断点”和“运行到光标处”不是可接受的解决方案。
最佳答案
我有一个宏可以精确地执行此操作。它不是很快,但是非常有用(事实上我已经将它转换为 C#,所以我可以在 AddIn 中使用它,这要快得多)。只需使用您要忽略的功能自定义正则表达式并绑定(bind)到 F11 或您选择的另一个键:
Sub StepIntoNextRealFunction()
DTE.Debugger.StepInto(True)
Dim frame As EnvDTE.StackFrame = DTE.Debugger.CurrentStackFrame
Dim fn As String = frame.FunctionName
Dim skipRE As Regex = New Regex("operator.*->|MyString::MyString|operator new|operator.*\*|ignoreFunction")
If (skipRE.Match(fn).Success) Then
DTE.Debugger.StepOut(True)
DTE.Debugger.StepInto(True)
End If
End Sub
编辑:这是一个 C# 版本 - 您需要创建一个插件,然后连接到 DTE 对象:
public void StepIntoNextRealFunction(DTE2 dte)
{
Debugger2 debugger=(Debugger2)dte.Debugger;
debugger.StepInto(true);
while (true) {
EnvDTE.StackFrame frame = debugger.CurrentStackFrame;
string fn = frame.FunctionName;
Regex skipRE = new Regex("operator.*->|basic_string.*basic_string");
if ((skipRE.Match(fn).Success)) {
debugger.StepOut(true);
debugger.StepInto(true);
} else {
break;
}
}
}
关于c++ - 阻止调试器进入功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330184/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“