我有一个不寻常的情况,我有一个非常简单的异常被抛出并被相同的方法捕获. 它不会被重新抛出(天真的程序员常常遇到的问题).然而它的StackFrame只包含一个当前方法.这是它的样子:
at (my class).MyMethod() in C:\(my file path and line)
Run Code Online (Sandbox Code Playgroud)
实际上,在VS2010调试器的调用堆栈中,可能有30种方法可以实现这一点,它涉及六个不同的程序集.似乎不可能对所有人进行优化.此外,对于.NET 4 ,此代码是在调试模式下构建的,没有优化.我甚至(基于http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx).ini文件(包括一个)命名为[app] .vshost.ini)在同一文件夹中包含:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Run Code Online (Sandbox Code Playgroud)
此外,方法调用不在方法的末尾,因此尾递归优化似乎更不可能.
至于如何调用它:在调用堆栈上没有反射的使用,没有任何类型的Invoke()或BeginInvoke().这只是一个按钮点击的长链调用.点击处理程序大约是调用堆栈的10次调用.在它之下你有通常的WndProc,NativeWindow.Callback,本机/托管转换和消息循环.这最终是在一个从C#EXE程序集运行的ShowDialog()调用中.
现在,我发现我可以在catch处理程序中构造StackTrace类的实例,如果我传递Exception对象,则调用堆栈也很短.相反,如果我只调用没有参数的新StackTrace(),它会产生一个完整的调用堆栈.
我已经使用Reflector试图调试Exception类的内部被抛出并构造它的调用堆栈,但是我无法在Exception或StackTrace中设置断点.我可以在Environment.GetStackTrace()中设置它们,并且这个方法(Exception调用)似乎在构造和抛出过程中不会被调用,但我不知道调试器是否真的正常工作.(虽然这个方法确实被其他一些东西触发了,所以我不知道该怎么做.)
以下是该方法的摘录:
private void MyMethod()
{
...
try
{
throw new ApplicationException("Test failure");
}
catch (Exception e)
{
StackTrace stackTrace1 = new StackTrace(e);
StackTrace stackTrace2 = new StackTrace(e, false);
StackTrace stackTrace3 = new StackTrace(e, true);
StackTrace stackTrace4 = new StackTrace();
string STs = stackTrace1.ToString() + "\n---\n"
+ stackTrace2.ToString() + …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用LibGit2Sharp克隆VSTS(Visual Studio Team Services)存储库。我正在设置CredentialsHandler并UsernamePasswordCredentials代表我的Microsoft帐户的凭据,得到的结果是:
LibGit2Sharp.LibGit2SharpException was unhandled
HResult=-2146233088
Message=Too many redirects or authentication replays
Source=LibGit2Sharp
Run Code Online (Sandbox Code Playgroud)
如果我什至无法传递我的真实用户名和密码,我不确定是否可行。
我也尝试过使用这里DefaultCredentials提到的方法,但这似乎仅用于TFS,而不是VSTS(用于TFS的NTLM凭据)。
.net ×1
azure-devops ×1
c# ×1
exception ×1
git ×1
libgit2sharp ×1
stack-frame ×1
stack-trace ×1
tfs ×1