/// <summary> /// Need to do this so we retain pointer from original first instruction to new first instruction (nop) /// for dbg file to point to it so VS debugger will step into weaved methods /// </summary> /// <param name="ilProcessor"></param> /// <param name="firstInstruction"></param> /// <returns></returns> private static Instruction RejigFirstInstruction(ILProcessor ilProcessor, Instruction firstInstruction) { /* From: opcode operand <-- pdb first line pointer To: nop <-- pdb first line pointer opcode operand <-- cloned second acting as first */ // clone first instruction which will be used as actual var clonedSecond = CloneInstruction(firstInstruction); clonedSecond.Offset++; var sampleNop = ilProcessor.Create(OpCodes.Nop); // change actual first instruction to NOP firstInstruction.OpCode = sampleNop.OpCode; firstInstruction.Operand = sampleNop.Operand; // append second instruction which now is same as first one used to be at the start of this method // and actual first one is nop firstInstruction.Append(clonedSecond, ilProcessor); // return cloned second as new first instruction return clonedSecond; }