小编Fab*_*ini的帖子

如何解释此堆栈跟踪

我最近发布了一款Windows phone 8应用程序.该应用程序有时似乎随机崩溃,但问题是它崩溃没有破坏,我得到的唯一信息是输出上的消息,告诉我有一个访问冲突没有给出任何细节.因此,在发布后,我可以从崩溃报告中获得更多信息,但它们对我来说有点隐秘.

信息是:

Problem function: unknown //not very useful
Exception type: c0000005 //this is the code for Access violation exception
Stack trace: 
Frame    Image        Function      Offset 
0        qcdx9um8960                0x00035426 
1        qcdx9um8960                0x000227e2
Run Code Online (Sandbox Code Playgroud)

我不习惯使用内存指针和similia,我不习惯看到像这样的堆栈跟踪.

所以我有这样的问题:

  1. 我该如何解读/阅读这些信息,每条信息的含义是什么?
  2. 有没有办法利用这些信息来搜索我的问题?
  3. 有没有办法在VS2012中调试时获取这些信息

笔记:

  • 我不是在询问访问冲突是什么
  • 我将其标记为c#和c ++,因为我的代码在c#中,但是通过WebBrowser组件的c ++实现生成异常(我是半猜)

编辑:

我尝试将Debug类型设置为Native,这让我获得了与开发中心崩溃报告中相同的信息.这种方式调试器在抛出异常时中断并让我看到反汇编的代码,遗憾的是没有qcdx9um8960 .pdb文件(即使在Microsoft Symbol Server上),所以我不知道导致错误的函数名称.

c# c++ access-violation windows-phone-8

50
推荐指数
2
解决办法
2340
查看次数

什么都不做的异步方法

我有一个IAnimation暴露方法的接口BeginAsync().该方法应该启动动画并在完成时返回.

我想要做的是实现一个只在执行时返回的null动画类.NoAnimationBeginAsync()

这是正确的实施吗?

public async Task BeginAsync()
{
    await Task.Run(() => { });
}
Run Code Online (Sandbox Code Playgroud)

我怀疑有一种比这更优雅的方法.我还考虑过创建一个空方法.但这给了我一个我不喜欢的警告.

.net c# asynchronous task async-await

12
推荐指数
1
解决办法
3922
查看次数

使用保护条款或捕获异常更好吗?

使用保护子句防止异常或捕获异常是否更好?有最好的做法吗?这两种方法的利弊是什么?

例如,这更好:

try
{ 
    param=myArray[3];
}
catch (IndexOutOfRangeException e)
{
    do something...
}
Run Code Online (Sandbox Code Playgroud)

或这个:

if(myArray.Length < 4)
{
    do something...
}
else
{
    param=myArray[3];
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家的答案:)

c# java exception

8
推荐指数
3
解决办法
2835
查看次数

什么可能导致这个内存问题?

我正在为Windows Phone 8开发应用程序,我遇到了内存泄漏问题.但首先是一些背景.该应用程序(不幸的是)使用WebBrowsers作为页面.这些页面非常复杂,涉及很多javascript.

应用程序的本机部分用c#编写,负责与javascript进行一些简单的通信(例如,native是javascript与服务器通信的委托),为页面转换,跟踪,持久性等制作动画.是在一个独特的PhoneApplicationPage中完成的.

在我因内存不足异常而崩溃之后,我开始分析应用程序.我可以看到WebBrowsers,它是应用程序的重要组成部分,正在正确处理.但我看到的问题是内存不断增加.更糟糕的是,我对分析器的反馈很少.根据我的理解,分析器图表说存在一个大问题,而分析器数据表明根本没有问题......

注意:该步骤表示从WebBrowser到另一个WebBrowser的导航.通过两个控件之间的动画创建(我猜)尖峰.在我在图像中选择的范围中,我正在向前导航,一个向后进行最多5个WebBrowsers(2个用于总是存在的菜单,1个用于索引页,1个用于我导航的页面和1个对于我导航到的页面).在每个导航中,探查器显示正确数量的WebBrowsers:向前导航后为5,向后导航后为4.

注2:我添加了红线,以便更清楚地知道内存在那段时间内会上升

从图像中可以看出 探查 内存使用量相当大,但数字表示它很低,在这段时间内,保留分配低于启动时...

我希望我已经包含了足够的信息.我想知道可能导致这个问题的一些想法.我到目前为止的想法是:

- WebBrowser中的javascript做错了(例如没有清理一些事件处理程序).即使是这种情况,WebBrowser也不应该在销毁时释放内存吗?

- 使用一个独特的PhoneApplicationPage是不应该做的邪恶,改变它的结构可能会导致这种情况.

-其他?

另一个问题:为什么图表显示正确的内存使用量而数字没有?

如果您需要有关探查器的更多信息,请询问,我将在明天发布.

c# memory xaml webbrowser-control windows-phone-8

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

using语句是否只处理它创建的第一个变量?

假设我有一个一次性对象MyDisposable,它将另一个一次性对象作为构造函数参数.

using(MyDisposable myDisposable= new MyDisposable(new AnotherDisposable()))
{
     //whatever
}
Run Code Online (Sandbox Code Playgroud)

假设myDisposable不处理它AnotherDisposable内部的处理方法.

这只能正确处理myDisposable吗?还是处理它AnotherDisposable

c# idisposable using

6
推荐指数
2
解决办法
441
查看次数

有一种方法可以创建一个自动创建使用引用的代码片段吗?

我在c#中创建了一个简单的代码片段,用于添加该行

Debug.WriteLine("");
Run Code Online (Sandbox Code Playgroud)

现在,当您使用代码段时,下一步将是自动创建

using System.Diagnostic;
Run Code Online (Sandbox Code Playgroud)

有没有办法自动创建引用?我尝试以这种方式设置片段参考和导入元素:

<Snippet>
  <References>
    <Reference>
      <Assembly>System.dll</Assembly>
    </Reference>
  </References>
  <Imports>
    <Import>
      <Namespace>System.Diagnostic</Namespace>
    </Import>
  </Imports>
      .
      .
      .
</Snippet>
Run Code Online (Sandbox Code Playgroud)

但它不起作用

c# code-snippets visual-studio-2012

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