Skip to content

Instantly share code, notes, and snippets.

@CleanCoder
CleanCoder / Production Issue
Last active September 7, 2018 08:02
线上排查
#自动抓取Dump, 当异常信息包含特定字符串
1. procdump.exe -ma -e 1 -f <Exception Content> <PID>
.i.e. procdump.exe -ma -e 1 -f "Commands ouy of sync" 3368
-ma Write a dump file with all process memory. The default dump format only includes thread and handle information.
-e Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.
-f Filter the first chance exceptions. Wildcards (*) are supported. To just display the names without dumping, use a blank ("") filter.
C:\>procdump -e 1 -f "" w3wp.exe
Display without writing a dump, the exception codes/names of w3wp.exe
1. A General Fast Method Invoker (https://www.codeproject.com/Articles/14593/A-General-Fast-Method-Invoker)
public static FastInvokeHandler GetMethodInvoker(MethodInfo methodInfo)
{
DynamicMethod dynamicMethod = new DynamicMethod(string.Empty,
typeof(object), new Type[] { typeof(object),
typeof(object[]) },
methodInfo.DeclaringType.Module);
ILGenerator il = dynamicMethod.GetILGenerator();
ParameterInfo[] ps = methodInfo.GetParameters();
Type[] paramTypes = new Type[ps.Length];
@CleanCoder
CleanCoder / FP
Created July 20, 2018 02:07
Funtional Programming
struct Result<T> {
public T Ok { get; }
public Exception Error { get; }
public bool IsFailed { get => Error != null; }
public bool IsOk => !IsFailed;
public Result (T ok) {
Ok = ok;
Error = default (Exception);
}
@CleanCoder
CleanCoder / Task Extension
Last active April 8, 2020 09:47
Task Extension
static async Task<T> Otherwise<T> (this Task<T> task, Func<Task<T>> orTask) {
task.ContinueWith (async innerTask => {
if (innerTask.Status == TaskStatus.Faulted)
return await orTask ();
return await Task.FromResult<T> (innerTask.Result);
}).Unwrap ();
}
static async Task<T> Retry<T> (Func<Task<T>> task, int retries, TimeSpan delay, CancellationToken cts = default (CancellationToken)) {
@CleanCoder
CleanCoder / WinDBG
Last active November 17, 2021 19:58
WinDBG
1) 准备工作
.loadby sos clr
.cordll -ve -u -l
.load <<path>>\sosex.dll
.load <<path>>\mex.dll
.symfix
.reload
2) 常用方法
!pe [<exceptionAddr>] most recent exception data (don’t forget the external stack)