Hi -

I usually just print <a GenRet value>. The only GDB problem that
I noticed was that you'll print garbage if the variable has
not yet been initialized. I've never tried printing the
return value as you do...  with run till exit and $9.

-michael

On 12/02/2013 02:33 PM, Vassily Litvinov wrote:
> What tricks do people use to examine 'GenRet' structs when debugging
> Chapel compiler's codegen in non-LLVM mode?
>
> I noticed a couple of weird things:
>
> * Printing <a GenRet value>.c.c_str() sometimes does not work:
>
>     .....
>     Run till exit from #0  baseASTCodegen (ast=0x1980bf0) at baseAST.cpp:415
>     Value returned is $9 = {c = {_M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
> fields>}, _M_p = 0xdc9a08 "rfun(&rGlob, iGlob)"}}, val = 0x0, type =
> 0x0, chplType = 0x85ed50, isLVPtr = 0 '\000', isUnsigned = false}
>     (gdb) p $9.c.c_str()
>     Attempt to take address of value not located in memory.
>
> When/because that happens, I resort to printing <a GenRet
> value>.c._M_dataplus._M_p. Other suggestions?
>
> * GDB sometimes shows garbage in _M_p of a local 'ret' variable where it
> should be legit. For example, at the end of this function:
>
>     GenRet SymExpr::codegen() {
>       GenInfo* info = gGenInfo;
>       FILE* outfile = info->cfile;
>       GenRet ret;
>       if( outfile ) {
>         if (getStmtExpr() && getStmtExpr() == this)
>           codegenStmt(this);
>         ret = var->codegen();
>       } else {
>     #ifdef HAVE_LLVM
>         .....
>     #endif
>       }
>       return ret;
>     }
>
> I get:
>
>     (gdb) p ret.c._M_dataplus._M_p
>     $5 = 0x7fffffff1360 "(`\033\005"
>
> However, when I type 'finish', the result is happy:
>
>     Run till exit from #0  SymExpr::codegen (this=0x1d535d0) at expr.cpp:305
>     baseASTCodegen (ast=0x1d535d0) at baseAST.cpp:415
>     Value returned is $6 = {c = {_M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
> fields>}, _M_p = 0x51b6028 "&this8"}}, val = 0x0, type = 0x0, chplType =
> 0x8592d0, isLVPtr = 1 '\001', isUnsigned = false}
>     (gdb)
>
> i.e. _M_p is happy now. But then in the caller of the above, GenRet
> baseASTCodegen(BaseAST* ast), _M_p is back to "(`\033\005".
>
> Is this just a glitch with debugging info/symbols?
>
> Vass
>
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT
> organizations don't have a clear picture of how application performance
> affects their revenue. With AppDynamics, you get 100% visibility into your
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
> _______________________________________________
> Chapel-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/chapel-developers
>


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Chapel-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-developers

Reply via email to