I would like to thank you for your detailed answer.
First of all, breakpoints and logs are not an option for me because my goal is not to debug my instance, or-tools solver is working very well and providing the results I need. My goal is to provide a useful message to the user when there is no solution.
Thank you also for pointing me out to the solution tree, although it does not seem easy, it could be a valid option.
I agree that my question is not well defined, but as you say, it is a very natural question, so there is probably a way to define it better. Let me explain my problem a little bit more:
My users have some freight to put into a truck and I am using or-tools to optimize what can be loaded into the truck. When it does not fit, I would like to explain to the user what is the problem. It could be due to the volume of the freight, or its weight, or due to the weight on axles..
So in fact I have, 'good constraints', which represent my input such as the volume and weight of the freight, and 'wrong constraints' which are the one I am interested in when they 'fail', such as the truck capacity or its maximum weight.
What about removing the 'wrong constraints' Ci and using them as objective, like this:
Minimize Sum_i(Oi), subject to the 'good' constraints.
Where Oi is the objective for Ci. For instance if Ci is x-4y<5, then my objective would be Max(0, x-4y-5)
The solution to this minimisation problem should give me the 'failing' constraints that I want by simply taking the ones having Oi!=0 at the solution value.
Of course, now I don't have a linear objective anymore but may be it possible to transform it into something linear? I am really just thinking out loud here and would be happy to have your feedback.