我的一个客户在尝试使用我的产品时遇到了异常.我获得了发生的异常的callstack,其顶部是:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.__Error.WinIOError()
at System.IO.Path.GetTempFileName()
at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
at System.Windows.Input.Cursor..ctor(Stream cursorStream)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索这个,我发现很多博客文章说明当%TEMP%文件夹中有超过65535个临时文件时会抛出此异常,并且解决方案是简单地清除旧的临时文件.我可以要求客户这样做,但这可能只是一个临时的解决方案 - 如果他们经常运行其他一些软件,经常调用GetTempFileName,这将使问题一遍又一遍地重复出现?
我不能只是以编程方式清除%TEMP%文件夹,因为这可能会以某种方式损坏其他东西,我无法避免调用GetTempFileName(并使用我自己的临时文件夹),因为它不是我,而是WPF代码正在调用它.
这有什么永久的解决方案吗?
更新:我已经确认%TEMP%文件夹溢出日志文件的问题不是由我自己的代码引起的,而且必须由客户机器上的其他第三方应用程序引起.我也查看了实现,Cursor.LoadFromStream
它肯定没有错 - 它生成一个临时文件,但然后在finally
块中删除它.
我通过Extensions Manager添加了"xUnit.net runner for Visual Studio"v0.99.8,但是当我打开Test Explorer窗口时,它似乎没有接受我的任何单元测试.此外,Resharper 9 EAP确实是唯一支持VS2015的Resharper版本似乎还没有xUnit Test Runner的插件.
那怎么样,我可以在VS2015预览中运行xUnit单元测试吗?
在C#中,尝试编译以下代码会产生错误,"涉及'A'和'A.B'的循环基类依赖性"
public class A : A.B
{
public class B { }
}
Run Code Online (Sandbox Code Playgroud)
但是,我正在通过反编译器查看第三方DLL,并看到这种结构.这怎么可能?我只能假设第三方DLL是用其他一些.Net语言编写的,但是什么语言和语法是什么?
在删除断点时,EnvDTE的DebuggerEvents中似乎没有任何事件通知消费者.我还查看了Visual Studio SDK并注册了一个IDebugEventCallback2,但是当我删除断点时似乎没有触发回调.
如何在用户删除断点时收到通知?
如果检查Reflector中的C#代码,您可以注意到使用模式CS $ X $ Y命名的特殊编译器生成的局部变量.这些变量是(非正式地)记录在这个答案中.
有没有办法通过Visual Studio中的Watch窗口或通过VS Debugger Extensibility API查看这些值?
我是专门询问常规的Visual Studio调试器,请不要回答这可能是通过windbg/sos/sosex - 因为那不是我正在寻找的.
对于以下C#代码行:
BitArray bitty = new BitArray(new[] {false, false, true, false});
Run Code Online (Sandbox Code Playgroud)
如果我在Watch窗口中评估"bitty",我看不到集合的成员.如果我评估"bitty,results",它应该枚举IEnumerable并显示结果,我会收到消息"只有可枚举的类型可以有结果视图",即使BitArray是一个IEnumerable.
为什么调试器会这样做?
CLARIFICAITON:我问的是VS Debugger Expression Evaluator中发生了什么,而不是询问如何在调试器中查看BitArray.
我正在使用VS2010 Beta 2来调试一些多线程代码.喜欢并行堆栈等
我有一个问题:我在一个可能被多个线程调用的方法中设置断点.一旦我达到了断点,我真的希望将重点放在触发该断点的线程上.但是,当我点击"step"时,VS经常切换到另一个线程(比如我在线程1上停止了,但同时,线程2击中了我的断点).
我知道我可以手动冻结线程窗口中的线程.有没有办法自动完成 - 基本上,一旦我遇到断点,冻结除当前线程之外的所有线程,直到我击中F-5?
debugging visual-studio-2010 visual-studio visual-studio-debugging
我正在使用以下代码打开一个文件,用于读取我之前在用户的%TEMP%文件夹中创建的文件:
new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
Run Code Online (Sandbox Code Playgroud)
在某些用户的计算机上,这有时会抛出UnauthorizedAccessException,并显示消息"访问路径...被拒绝".我无法重现这一点.我最初的猜测是,反病毒或索引引擎正在做一些时髦的事情,但我也注意到这段代码正在使用"FileShare.Delete",我不确定应该在那里.
是否存在使用"FileShare.Delete"导致UnauthorizedAccessException的情况?
在以下代码中:
private static void Main(string[] args)
{
var listy = new List<DateTime> { DateTime.Now };
MyMethod(listy);
}
static void MyMethod<T>(List<T> myList)
{
// put breakpoint here
}
Run Code Online (Sandbox Code Playgroud)
如果我打破调试器,在"myList"上打开QuickWatch,我看到:
myList
[0]
Raw View
Run Code Online (Sandbox Code Playgroud)
如果我选择"[0]"节点并单击Add Watch,则添加到Watch的表达式:
(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>(myList)).Items[0]
此表达式似乎正确,但是,监视窗口显示以下错误:
'System.Collections.Generic.Mscorlib_CollectionDebugView.Mscorlib_CollectionDebugView(System.Collections.Generic.ICollection)'的最佳重载方法匹配有一些无效的参数
这似乎是调试器中的一个错误.为什么会这样?它是否记录在任何地方?
c# ×7
debugging ×4
.net ×2
c++ ×1
envdte ×1
filestream ×1
ipc ×1
performance ×1
unit-testing ×1
vspackage ×1
vsx ×1
xunit ×1
xunit.net ×1