1. An apparatus for computing, including debugging of a software program, comprising: a memory analysis module to be operated by a computer processor to: obtain a debug information for a compiled software program compiled from a source code or bytecode for the software program; receive identification of a memory corruption in the compiled software program; obtain a runtime program control flow trace having a list of basic blocks of the compiled software program; disassemble or cause to be disassembled the list of basic blocks to identify a set of store instructions; identify in the debug information a data type or structure of data types of the memory corruption and of a store instruction in the set of store instructions; determine whether each store instruction in the set of store instructions is a candidate store instruction based on whether each store instruction has the data type or structure of data types of the memory corruption and has written to a memory location associated with the memory corruption; and obtain and output at least one link mapping each candidate store instruction to a portion of the source code or bytecode of the software program, wherein each basic block in the list of basic blocks comprises a software instruction which has no branch in, other than an entry into the software instruction, and no branch out, other than at an exit of the software instruction, and each basic block is a node in the runtime program control flow trace.