Dynamic program slicing is a possible way, though not necessarly practical with 100k lines of codes.
For example, if your original code is:
if (recipe.has_option_x) {
   foo();
} else {
   bar();
}
 And you slice your program assuming that recipe.has_option_x is false, you can reduce the size of the code being effectively called to bar(). As usual, theoritical limits will prevent a tool to always know with certainty whether a branch of your program can be safely removed.
The wikipedia page has some links to existing tools. See also Dynamic slicing in C/C++Dynamic slicing in C/C++.