小编red*_*una的帖子

C#重新抛出异常:如何在IDE中获取异常堆栈?

之前有关于重新抛出异常的正确方法的讨论.相反,这个问题是关于如何在使用rethrow时从Visual Studio获得有用的行为.

考虑以下代码:

   static void foo() {
        throw new Exception("boo!");
    }

    static void Main(string[] args) {
        try {
            foo();
        } catch (Exception x) {
            // do some stuff
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

出现的异常具有正确的堆栈跟踪,显示foo()作为异常的来源.但是,GUI调用堆栈窗口只显示Main,而我期望它显示异常的调用堆栈,一直到foo.

当没有重新抛出时,我可以使用GUI快速导航调用堆栈,以查看导致异常的调用以及我们如何到达那里.

通过重新抛出,我希望能够做同样的事情.相反,GUI显示的调用堆栈对我没用.我必须将异常详细信息复制到剪贴板,将其粘贴到记事本,然后手动导航到我感兴趣的调用堆栈的任何功能.

顺便说一句,如果我添加[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]或者如果我将catch更改为just ,我会得到相同的行为catch (Exception).

我的问题是:鉴于我使用的代码重新抛出,有人可以建议一种方便的方法来导航与异常相关的调用堆栈吗?我正在使用Visual Studio 2010.

.net c# exception visual-studio

17
推荐指数
2
解决办法
1595
查看次数

为什么BufferedStream.Write会抛出"此流不支持搜索操作"?

这个让我困惑.当我甚至没有打电话时,我收到关于寻找的错误?

我的代码看起来像这样:

// send 42
uint value = 42;
byte[] msg = BitConverter.GetBytes(value);
stream.Write(msg, 0, sizeof(uint));
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

System.NotSupportedException was unhandled
Message="This stream does not support seek operations."
Source="System"
StackTrace:
   at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
   at System.IO.BufferedStream.FlushRead()
   at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)
...
Run Code Online (Sandbox Code Playgroud)

流是类型System.IO.BufferedStream.可能会发生什么?

编辑更多信息:

sizeof(uint)==msg.length在这种情况下.
流声明为stream = new BufferedStream(new NetworkStream(socket), 1024)

编辑:

就是这样!虽然可以在一个单独读取和写入NetworkStream,但当切换到BufferedStream它时,必须有一个单独的读取和写入.显然,只需NetworkStream在同一个套接字上调用构造函数两次即可.

如果可以的话,我会接受Justin和Hans的答案,因为我让我完全理解错误,另一个让我找到解决方案.感谢大家!

c# networkstream bufferedstream

9
推荐指数
2
解决办法
5701
查看次数

确定要复制CRITICAL_SECTION?

可以使用CRITICAL_SECTION变量来实现互斥.

我的问题是:CRITICAL_SECTION是否支持复制?如果我将一个值传递给另一个线程,我是否可以确定相互排除是否有效?

如果答案是"你不能那样做",我不会感到惊讶,但是得到某种官方确认会很好.我无法在文档中找到任何声明.

c winapi synchronization

8
推荐指数
1
解决办法
1184
查看次数

如何在.Net WinForms图表控件中检索所选范围?

我正在使用C#内置的Winforms Chart控件(System.Windows.Forms.DataVisualization.Charting.Chart),它具有内置功能,允许用户选择一个范围.我想做的是回读用户选择的范围.当然必须有一些简单的方法来做到这一点,但我一直无法找到它.

光标启用如下:

var ca = chart1.ChartAreas["ChartArea1"].CursorX;
ca.CursorX.IsUserEnabled = true;
ca.CursorX.IsUserSelectionEnabled = true;
Run Code Online (Sandbox Code Playgroud)

我知道当用户通过启用选择范围时我可以使图表变焦ca.AxisX.ScaleView.Zoomable,但我不希望图片改变:相反,我使用图表作为显示信息的方式,让用户选择一个范围然后我做了一些额外处理的X值.

我尝试连接到chart1.SelectionRangeChanged,并且每次更改范围时确实会触发 - 我似乎无法从CursorEventArg中获取选择范围.它有" NewSelectionStart"和" NewSelectionEnd"字段,但这些都是NaN令人失望的.我试着查看图表和轴的各种属性,但没有找到任何听起来很有希望的东西.

进一步的调查揭示了ChartArea.CursorX.SelectionStart属性,这听起来正是我需要的......除了它也是NaN.我不知道这是正常还是我遇到某种错误?

那么,我该如何确定用户选择的范围?

c# charts winforms

6
推荐指数
1
解决办法
5024
查看次数

命名参数:C#vs Python

C#和Python都允许使用命名参数,因此您可以编写如下内容:foo(bar:1).这很好,特别是与可选参数结合使用时.

我的问题是:如果有的话,C#和Python命名参数之间有什么区别?我对哪个是"最好的"不感兴趣,但是对于这些差异背后是否存在差异和可能的动机.

如果有人知道与其他语言的这个功能的实现(可能是Ruby或Objective-C)的差异,那也可能很有趣.

编辑以制作社区维基

c# python kwargs

5
推荐指数
2
解决办法
807
查看次数

response.sendRedirect在Servlet过滤器中不起作用

以下过滤器在我的prj2.从那里prj2我正在检查会话是否不在那里我想重定向到prj1具有url 的登录页面/prj1/sessionexpiry.在以下场景中,它不会重定向到登录页面而不会抛出任何异常.

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)    
throws IOException, ServletException {
    HttpServletResponse hsr = (HttpServletResponse) res;
    HttpServletRequest hreq = (HttpServletRequest) req;
    HttpSession session = hreq.getSession(false);

    if (session == null) {
        hsr.sendRedirect("/prj1/sessionexpiry");
        return;
    } else {
        chain.doFilter(req, res);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

servlets

5
推荐指数
1
解决办法
1224
查看次数

在Google数据流工作人员上暂存文件

Dataflow SDK中是否有允许我在工作器上暂存资源文件的内容?我有特定的静态文件资源,我需要在文件系统上为执行NLP的自定义DoFn提供这些资源.我的目标是从类加载器获取zip文件资源,并在工作程序初始化时将其解压缩到工作文件系统上,而不是尝试在自定义DoFn中执行此操作.

google-cloud-platform google-cloud-dataflow

5
推荐指数
1
解决办法
1261
查看次数

C预处理器魔术

我正在尝试使用预处理器技巧来声明一个魔术变量.像这样的东西:

DECLARE(x)
Run Code Online (Sandbox Code Playgroud)

应该扩展到

int _DECLARED_VARIABLE_x_LINE_12
Run Code Online (Sandbox Code Playgroud)

如果声明在输入源的第12行.我试图使用## token-pasting命令和__LINE__宏,但我要么__LINE__在那里得到一个未解释的" ",否则预处理器似乎完全忽略了我的行.我目前的猜测是:

 #define DECLARE(x) _DECLARED_VARIABLE_ ## x ## _LINE_ ## __LINE__
Run Code Online (Sandbox Code Playgroud)

c visual-studio c-preprocessor

3
推荐指数
2
解决办法
874
查看次数

"调用带有未知视图的sideInput()"异常,即使我正在通过视图?

代码如下所示:

return pcol.apply(ParDo.named("FindTheBug")
        .withSideInputs(foo)
        .withSideInputs(bar(
        .of(new DoFn<T, U>() {
            F myFoo = c.sideInput(foo);
            B myBar = c.sideInput(bar);
Run Code Online (Sandbox Code Playgroud)

声明这些侧输入,为什么Dataflow没有看到它们?

java google-cloud-dataflow apache-beam

2
推荐指数
1
解决办法
301
查看次数