我有一种方法可以从很多很多地方打来。
void foo()
{
do_some_work();
}
调试会话的设置很痛苦。如果我正在调试这个:
void main()
{
func1(); // which deep, deep down calls foo() over and over and over
func2(); // which calls foo() over and over and over
foo(); // This is the one that I actually want to debug
}
我想调试foo()
,但仅限于最后一次调用。没有方便的全局,公共,静态变量,我可以根据我所知的条件设置断点。
在 我可以采取哪种方法? 为什么不在 修改
我确实发现了一个轻微的欺骗。我可以这样做: 然后将条件断点设置为:void main()
{
func1(); // which deep, deep down calls foo() over and over and over
func2(); // which calls foo() over and over and over
Enable_debugger();
foo(); // This is the one that I actually want to debug
}
foo()
中设置我的断点,并为除最后一个以外的每个实例跳过它。main()
中设置调试点然后逐步调试?因为步入foo()
是一个很多的步入。 System.Threading.Thread.SetData(
System.Threading.Thread.GetNamedDataSlot("BREAKPOINT"), "on");
(string)System.Threading.Thread.GetData(
System.Threading.Thread.GetNamedDataSlot("BREAKPOINT")) == "on"
答案 0 :(得分:0)
我会添加一个全局变量,例如debugFoo
,该false
已发送到true
并在foo()
main()
之前设置为public static void foo()
{ // <-- Conditional breakpoint here.
Console.WriteLine(debugFoo);
}
public static bool debugFoo = false;
public static void Main()
{
foo();
debugFoo = true;
foo();
Console.ReadLine();
}
}。
foo()
然后在debugFoo == true
内设置条件断点,条件为
debugFoo
因此,根据您何时打开和关闭foo()
,您可以点击该断点。
修改强>
如果两个人彼此不可见,我考虑的第二种方法是修改public static void foo(bool doDebug = false)
{ // <-- Conditional breakpoint here
Console.WriteLine(doDebug);
}
public static void Main()
{
Console.WriteLine("No debug");
foo();
Console.WriteLine("Debug");
foo(true);
Console.ReadLine();
}
的参数,如果可能的话。
doDebug == true
设置条件断点:
foo()
这样您就不必修改对true
的其他现有调用,而是将main()
传递给您要调试的<http:listener-config name="api-httpListenerConfig" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<apikit-soap:config name="/EmpProgApiImplService/EmpProgApiImplPort/api-config" wsdlUrl="empprogapiimpl.wsdl" serviceName="EmpProgApiImplService" portName="EmpProgApiImplPort" doc:name="APIkit SOAP: Configuration"/>
<flow name="api-main">
<http:listener path="/EmpProgApiImplService/EmpProgApiImplPort" config-ref="api-httpListenerConfig" doc:name="/EmpProgApiImplService/EmpProgApiImplPort" />
<apikit-soap:router config-ref="/EmpProgApiImplService/EmpProgApiImplPort/api-config" doc:name="SOAP Router"/>
</flow>
<flow name="tagEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config">
<set-payload value="<soap:Fault xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><faultcode>soap:Server</faultcode><faultstring>Operation [tagEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config] not implemented</faultstring></soap:Fault>" doc:name="Set Payload"/>
</flow>
<flow name="startEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config">
<set-payload value="<soap:Fault xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><faultcode>soap:Server</faultcode><faultstring>Operation [startEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config] not implemented</faultstring></soap:Fault>" doc:name="Set Payload"/>
</flow>
<flow name="stopEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config">
<set-payload value="<soap:Fault xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><faultcode>soap:Server</faultcode><faultstring>Operation [stopEmp:/EmpProgApiImplService/EmpProgApiImplPort/api-config] not implemented</faultstring></soap:Fault>" doc:name="Set Payload"/>
</flow>
中的单个调用。
答案 1 :(得分:0)
如果您使用的是兼容版本的Visual Studio,则可以设置Conditional Breakpoints。我没有可用的版本列表,但这是遵循这些步骤并查看菜单选项是否适合您的最简单方法。