相关疑难解决方法(0)

有没有办法获取传递给方法的参数数组?

说我有一个方法:

 public void SomeMethod(String p1, String p2, int p3)
 {

 #if DEBUG
    object[] args = GetArguments();
    LogParamaters(args);
 #endif

     // Do Normal stuff in the method
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法检索传递给方法的参数数组,以便记录它们?

我有大量的方法,并希望避免手动将名称传递给记录器,因为人为错误将不可避免地蔓延.

我猜它会以某种形式涉及反射 - 这很好,因为它只会用于调试目的.

更新

更多信息:

我无法更改SomeMethod的方法签名,因为它作为WebMethod公开,并且必须复制它模拟的遗留系统.

遗留系统已经记录了传入的参数.从新实现开始将包装遗留系统,所以我希望记录进入C#版本的参数,以便我可以验证正确的参数是否传入按正确的顺序.

我只是想记录参数值和顺序,而不是它们的名字.

c# reflection methods arguments

26
推荐指数
3
解决办法
1万
查看次数

我可以通过C#中的堆栈跟踪获取方法局部变量吗?

我想得到一个关于我的堆栈跟踪的详细日志.我可以获得一个StackFrame,然后获取该方法,然后获取该方法的所有参数.就像下面的代码一样:

            StackTrace st = new StackTrace();
            StackFrame[] sfs = st.GetFrames();
            foreach (StackFrame sf in sfs)
            {
                MethodBase method = sf.GetMethod();
                ParameterInfo[] pis = method.GetParameters();
                foreach (ParameterInfo pi in pis)
                {
                      ....
                }
                Console.WriteLine(method.Name);
            }
Run Code Online (Sandbox Code Playgroud)

但是如何在方法中获取局部变量信息呢?

有人会对我有所了解吗?

非常感谢.

.net c#

7
推荐指数
1
解决办法
1641
查看次数

在C#异常处理程序中,我可以找到传递给引发异常的方法的参数吗?

我正在编写一个错误处理模块,用于构建到层中的相当复杂的系统.有时我们的数据层会引发模糊的异常.

注销抛出异常的方法的参数非常方便.

我可以反思异常的TargetSite属性来查找方法的参数类型和名称,但我似乎无法获取值...我错过了什么?


欺骗

在.net Exception中如何获取带有参数值的堆栈跟踪

c# exception

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

如何在堆栈跟踪转储中获取变量值?

我维护一个应用程序,当应用程序发生错误时,它会向我发送一封电子邮件.我将堆栈跟踪转储到电子邮件中,似乎工作正常.唯一缺少的是变量的.我得到了所有的调用等等,从来没有任何变量.为了将这些变量值转储到电子邮件中,我还缺少什么?

下面是我用来将其转储到电子邮件中的代码:

UtilityClass.SendEmail(shortNTID,
                       "admin@mydomain.com",
                       new string[] { "support@mydomain.com" },
                       "MyApplication error has occured for user: " +
                            shortNTID + " (Main).",
                       "Message: " + ex.Message.ToString() +
                       " Source: " + ex.Source.ToString() +
                       " Target Site: " + ex.TargetSite.ToString() +
                       " Stack Trace: " + ex.StackTrace.ToString());
Run Code Online (Sandbox Code Playgroud)

以下是电子邮件中的结果:

消息:指定的强制转换无效.来源:MyApplication目标站点:Void FindFormAndActivate(MyApplication.MDIParentForm,System.String,System.Object)堆栈跟踪:MyApplication.DtilityClass.FindFormAndActivate(MDIParentForm frmMDIParentForm,String formName,Object参数)MyApplication.DashboardAlerts.NavigateToAssignment()at MyApplication System.Windows上System.Windows.Forms.Control.WmMouseUp(Message&m,MouseButtons按钮,Int32单击)的System.Windows.Forms.Control.OnMouseClick(MouseEventArgs e)中的.DashboardAlerts.utAlerts_MouseClick(Object sender,MouseEventArgs e).在System.Windows.Fornd.NativeWindow的System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)的System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)中的Forms.Control.WndProc(Message&m).回调(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

编辑

有些答案建议我自己将变量值添加到电子邮件中.我怎么会得到这些价值呢?发送电子邮件的此代码段不在失败的方法中.这是在发生异常时运行的代码.如果没有处理和纠正异常,我会让它冒泡到线程的顶部,Application.ThreadException += new ThreadExceptionEventHandler(HandleError);并且该HandleError方法是进行此电子邮件调用的方法.它不知道导致异常的方法的变量或参数是什么.

.net c# variables stack-trace

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

如何在Java中打印导致Exception的参数值?

我正在为csv文件编写解析器,有时我会得到NumberFormatException.是否有一种简单的方法来打印导致异常的参数值?

目前我有很多看起来像这样的try-catch块:

String ean;
String price;

try {
    builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
    System.out.println("EAN: " + ean);
    e.printStackTrace();
}

try {
    builder.price(new BigDecimal(price));
} catch (NumberFormatException e) {
    System.out.println("Price: " + price);
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我希望能够写出如下内容:

try {
    builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
    e.printMethod();    // Long.parseLong()
    e.printArgument();  // should print the string ean "99013241.23"
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

有什么方法我至少可以改进我的代码吗?以编程方式更多地进行这种打印/记录?

更新:我试图实施Joachim Sauer所回答的问题,但我不知道我是否把一切都做对了,或者我是否可以改进它.请给我一些反馈.这是我的代码:

public class TrackException extends NumberFormatException {
    private final String arg;
    private final String method;

    public …
Run Code Online (Sandbox Code Playgroud)

java logging exception-handling try-catch

4
推荐指数
1
解决办法
1195
查看次数