当VS调试程序时,如何知道卡在了哪里

孙大诚_SunRobin 2014-09-15 03:42:28
在调试程序的时候,遇到一个这样的问题,

......
doc.Add(table);
......

当程序执行到doc.Add方法的时候,就卡住了,也不抛异常。 其实一开始我也不知道这里卡住,只是程序一跑,就无反应了,
我是一步一步调试才知道是卡在了这里。

有什么方法能够准确知道VS中,程序是运行到哪一句代码的时候,然后就不往下走了么?
...全文
2256 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
FengYuanMSFT 2014-09-18
  • 打赏
  • 举报
回复
用 ETW, 下载 PERFVIEW
孙大诚_SunRobin 2014-09-18
  • 打赏
  • 举报
回复
铁歌 2014-09-18
  • 打赏
  • 举报
回复
如果一个对象调试进不去,通常意味着该对象的创建出了异常,检测下该对象new构建函数是否能够创建
孙大诚_SunRobin 2014-09-17
  • 打赏
  • 举报
回复
孙大诚_SunRobin 2014-09-17
  • 打赏
  • 举报
回复
引用 14 楼 Z65443344 的回复:
还有,如果多个线程共用一个函数,加断点有时候会卡住 要加断点,最好是把要测试的函数放到主线程里运行,然后再断点测试
嗯。好的,谢谢。 其实最终总结一下,就是VS里边没有任何小工具能查看当前程序运行到哪里了,这样理解对吧?
於黾 2014-09-17
  • 打赏
  • 举报
回复
还有,如果多个线程共用一个函数,加断点有时候会卡住 要加断点,最好是把要测试的函数放到主线程里运行,然后再断点测试
qzyf1992 2014-09-17
  • 打赏
  • 举报
回复
引用 9 楼 sundacheng1989 的回复:
[quote=引用 7 楼 qzyf1992 的回复:] 一看就是操作word的。。不抛异常估计是出现死循环或者死锁了。。仔细检查代码。看是不是用了多线程或者死循环
这个是操作PDF的,生成PDF的。doc.Add方法最底层的方法,就是在这里就卡住不动了。[/quote] 把你的dll拿去反编译看看里面的逻辑 还有把断电去掉 看看 抛不抛异常 。如果不抛异常而且 很长时间没反应 那估计就是 出现死循环或者死锁或者无线递归的情况。。不然的话应该会抛异常的。。而且可能这个Add方法需要时间过长导致断电没反应这都很正常
於黾 2014-09-17
  • 打赏
  • 举报
回复
如果你能遵循规范,不要把大段的代码都写到一个方法里,而是将相似的内容进行封装,每个函数里代码不要过多 这样查找起来会快很多 至于为什么会卡住,只能自己去找原因了.除非你有dll的源码并且附加进工程,否则dll里到底怎么了,谁知道
孙大诚_SunRobin 2014-09-16
  • 打赏
  • 举报
回复
引用 7 楼 qzyf1992 的回复:
一看就是操作word的。。不抛异常估计是出现死循环或者死锁了。。仔细检查代码。看是不是用了多线程或者死循环
这个是操作PDF的,生成PDF的。doc.Add方法最底层的方法,就是在这里就卡住不动了。
回归了! 2014-09-16
  • 打赏
  • 举报
回复
既然知道卡在哪,在那设置个断点,然后调试查看,具体问题不就容易找出了?
qzyf1992 2014-09-16
  • 打赏
  • 举报
回复
一看就是操作word的。。不抛异常估计是出现死循环或者死锁了。。仔细检查代码。看是不是用了多线程或者死循环
孙大诚_SunRobin 2014-09-16
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
可以让调试器停住,然后在调试堆栈中看到它当前调用的是什么。 当然,如果你有完备的单元测试和日志,那么发现起来或许容易一些。
让调试器停住看堆栈貌似就是这个?这个具体怎么操作,有没有什么链接可以给我,谢谢。
孙大诚_SunRobin 2014-09-16
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
doc.add是啥,跟进去
doc.Add 是ItextSharp,是第三方dll提供的一个方法,再往下走就是Metadata了。我的意思是,我完全不知道程序到这里就卡住了,我是一步一步的代码调试到这里才发现的。有没有什么办法能够定位的哪个方法执行的时候非常耗时?否则如果代码很多的话,一步一步调试那就太费劲了。
孙大诚_SunRobin 2014-09-16
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
f11跟进去?
FGG丶 2014-09-15
  • 打赏
  • 举报
回复
用日志记录一下噻
threenewbee 2014-09-15
  • 打赏
  • 举报
回复 1
可以让调试器停住,然后在调试堆栈中看到它当前调用的是什么。 当然,如果你有完备的单元测试和日志,那么发现起来或许容易一些。
bdmh 2014-09-15
  • 打赏
  • 举报
回复
doc.add是啥,跟进去

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧