gpt4 book ai didi

c# - 调试器在没有任何解释的情况下终止应用程序(在 CryptoStream.ReadByte() 调用中)

转载 作者:行者123 更新时间:2023-11-30 21:12:08 29 4
gpt4 key购买 nike

编辑:我发现了问题。

我的对象的构造函数正在以写入模式初始化文件流,无论我们是否要加密或解密文件。即使写入文件流在解密之前会被关闭(用于此目的的另一个文件流),它仍然会导致静默崩溃。现在它工作正常。

所以它看起来像是一个相当普通的文件访问问题。很遗憾CryptoStream没有将其作为异常处理。

感谢您的建议 - 我会看看 ProcDumpWinDbg


我刚刚创建了一个小应用程序来读取和解密本地硬盘中的文件。

Visual Studio 调试器会在没有任何消息或解释的情况下终止应用程序。当执行以下代码中的 read = crypto.ReadByte() 行时会发生这种情况。

            try
{
if (file != null)
{
// the stream that was used for encryption
file.Close();
}
var provider = new DESCryptoServiceProvider();
provider.Key = Key;
provider.IV = Key;
var ict = provider.CreateDecryptor();
var bytes = new List<byte>();
using (var stream = new FileStream(fileName, FileMode.Open))
{
crypto = new CryptoStream(stream, ict, CryptoStreamMode.Read);
var decrypted = new MemoryStream();
Int32 read;
try
{
do
{
read = crypto.ReadByte(); // the application dies here
if (read != -1) bytes.Add(Convert.ToByte(read));
}
while (read != -1);
}
finally
{
// we never get here
decrypted.Close();
}

};
return ASCIIEncoding.ASCII.GetString(bytes.ToArray());
}
catch (Exception x)
{
// we never get here either
crypto.Close();
return x.Message;
}

我尝试并排除的:

  1. 没有抛出异常。我们从不输入 finallycatch。我还启用了 Break when an exception is thrown,但这没有任何区别。没有任何异常迹象。

  2. 发布应用程序 (ClickOnce) 并运行它具有相同的效果。

  3. 重新启动没有任何区别。

  4. 制作文件的副本(以防其他进程阻止访问它等)并尝试读取该副本以同样的方式失败。

  5. 如果我尝试在 Watch 窗口中评估 crypto.ReadByte(),我将按顺序收到以下消息:

    • 这个表达式会产生副作用,不会被求值

    • 当我刷新它时:函数求值被中止

    • 当我刷新它或等待几秒钟时:无法计算表达式。调用的对象已与其客户端断开连接。

应用终止,我们回到 Visual Studio。

这里有什么问题?

最佳答案

一些建议:

  • 尝试使用 ProcDump使用您应用上的 -t 选项。当您的应用程序过早退出时,这应该会创建一个转储文件。如果没有生成有用的转储,请尝试其他选项(例如 -e)。
  • 如果这不起作用,请尝试在 WinDbg 下运行您的应用。

关于c# - 调试器在没有任何解释的情况下终止应用程序(在 CryptoStream.ReadByte() 调用中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673753/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com