我正在尝试调试在特定时间死锁/卡住的.NET应用程序。有没有办法查看应用程序卡住时正在做什么?我假设VisualStudio提供了一些在附加到应用程序后查看堆栈跟踪的方法?(我确实尝试了Debug>Attachtoprocess并打开了CallStack和StackTraceExplorerWindows,但那里没有任何显示)。我正在寻找与pstack(在Unix/Linux上)相同的东西,即显示正在运行的进程的堆栈。 最佳答案 将VisualStudio附加到进程后,只需单击暂停即可查看任何给定时间的线程和调用堆栈窗口。
我的操作系统是RHEL7,我运行一个简单的Go程序:packagemainimport("time")funcmain(){time.Sleep(1000*time.Second)}在运行过程中,我检查进程的线程数:#cat/proc/13858/status|grepThreadThreads:5在使用RHEL上的pstack命令时,它只打印一个线程的堆栈:#pstack13858Thread1(process13858):#0runtime.futex()at/usr/local/go/src/runtime/sys_linux_amd64.s:307#10x00000000004
在linux上我们一般为了查看给定时间的进程栈pstackpid>我想知道osx中的相同内容是什么。谢谢 最佳答案 sudo/usr/libexec/stackshot-i-u-p这会将相关进程的所有线程的堆栈跟踪附加到文件/Library/Logs/stackshot-syms.log中。在调用stackshot之前考虑删除文件stackshot-syms.log。参见:stackshot(1)注意:OSX10.11ELCapitan不再包含stackshot。请改用lldb调试器:echo"threadbacktraceall"