[webkit-dev] Why does RELEASE_ASSERT not have an error message?

Saam barati sbarati at apple.com
Wed Feb 22 12:05:31 PST 2017


I like this idea. I think even doing what JF suggested could be really nice for suspected crashes. That way the register state would just tell us the reason.
If we do log, I think we should use WTFLogAlways instead of dataLog, because I think that does show up in some crash logs (but I could be wrong about this, I’m not 100% sure).

- Saam

> On Feb 22, 2017, at 11:58 AM, Geoffrey Garen <ggaren at apple.com> wrote:
> 
> I’ve lost countless hours to investigating CrashTracers that would have been easy to solve if I had access to register state.
> 
> I also want the freedom to add RELEASE_ASSERT without ruining performance due to bad register allocation or making the code too large to inline. For example, hot paths in WTF::Vector use RELEASE_ASSERT.
> 
> Is some compromise solution possible?
> 
> Some options:
> 
> (1) Add a variant of RELEASE_ASSERT that takes a string and logs.
> 
> (2) Change RELEASE_ASSERT to do the normal debug ASSERT thing in Debug builds. (There’s not much need to preserve register state in debug builds.)
> 
> Geoff
> 
>> On Feb 22, 2017, at 11:09 AM, Filip Pizlo <fpizlo at apple.com> wrote:
>> 
>> I disagree actually.  I've lost countless hours to converting this:
>> 
>> RELEASE_ASSERT(blah)
>> 
>> into this:
>> 
>> if (!blah) {
>>  dataLog("Reason why I crashed");
>>  RELEASE_ASSERT_NOT_REACHED();
>> }
>> 
>> Look in the code - you'll find lots of stuff like this.
>> 
>> I don't think analyzing register state at crashes is more important than keeping our code sane.
>> 
>> -Filip
>> 
>> 
>>> On Feb 21, 2017, at 5:56 PM, Mark Lam <mark.lam at apple.com> wrote:
>>> 
>>> Oh yeah, I forgot about that.  I think the register state is more important for crash analysis, especially if we can make sure that the compiler does not aggregate the int3s.  I’ll explore alternatives.
>>> 
>>>> On Feb 21, 2017, at 5:54 PM, Saam barati <sbarati at apple.com> wrote:
>>>> 
>>>> I thought the main point of moving to SIGTRAP was to preserve register state?
>>>> 
>>>> That said, there are probably places where we care more about the message than the registers.
>>>> 
>>>> - Saam
>>>> 
>>>>> On Feb 21, 2017, at 5:43 PM, Mark Lam <mark.lam at apple.com> wrote:
>>>>> 
>>>>> Is there a reason why RELEASE_ASSERT (and friends) does not call WTFReportAssertionFailure() to report where the assertion occur?  Is this purely to save memory?  svn blame tells me that it has been this way since the introduction of RELEASE_ASSERT in r140577 many years ago.
>>>>> 
>>>>> Would anyone object to adding a call to WTFReportAssertionFailure() in RELEASE_ASSERT() like we do for ASSERT()?  One of the upside (side-effect) of adding this call is that it appears to stop the compiler from aggregating all the RELEASE_ASSERTS into a single code location, and this will help with post-mortem crash debugging.
>>>>> 
>>>>> Any thoughts?
>>>>> 
>>>>> Mark
>>>>> 
>>>>> _______________________________________________
>>>>> webkit-dev mailing list
>>>>> webkit-dev at lists.webkit.org
>>>>> https://lists.webkit.org/mailman/listinfo/webkit-dev
>>>> 
>>> 
>>> _______________________________________________
>>> webkit-dev mailing list
>>> webkit-dev at lists.webkit.org
>>> https://lists.webkit.org/mailman/listinfo/webkit-dev
>> 
>> _______________________________________________
>> webkit-dev mailing list
>> webkit-dev at lists.webkit.org
>> https://lists.webkit.org/mailman/listinfo/webkit-dev
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev



More information about the webkit-dev mailing list