mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-26 16:04:34 +00:00
Show call stack in failure dialog.
This commit is contained in:
parent
9d392d2c90
commit
0d209b80f4
@ -431,6 +431,135 @@ bool View::Draw()
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::TextDisabled( "(%s)", RealToString( data.thread ) );
|
ImGui::TextDisabled( "(%s)", RealToString( data.thread ) );
|
||||||
}
|
}
|
||||||
|
if( data.callstack != 0 )
|
||||||
|
{
|
||||||
|
if( ImGui::TreeNode( "Call stack" ) )
|
||||||
|
{
|
||||||
|
ImGui::BeginChild( "##callstackFailure", ImVec2( 1200, 500 ) );
|
||||||
|
const auto w = ImGui::GetWindowWidth();
|
||||||
|
ImGui::Columns( 4 );
|
||||||
|
ImGui::SetColumnWidth( 0, w * 0.05f );
|
||||||
|
ImGui::SetColumnWidth( 1, w * 0.425f );
|
||||||
|
ImGui::SetColumnWidth( 2, w * 0.425f );
|
||||||
|
ImGui::SetColumnWidth( 3, w * 0.1f );
|
||||||
|
ImGui::TextUnformatted( "Frame" );
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::TextUnformatted( "Function" );
|
||||||
|
ImGui::SameLine();
|
||||||
|
s_instance->DrawHelpMarker( "Click on entry to copy it to clipboard." );
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::TextUnformatted( "Location" );
|
||||||
|
ImGui::SameLine();
|
||||||
|
s_instance->DrawHelpMarker( "Click on entry to copy it to clipboard." );
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::TextUnformatted( "Image" );
|
||||||
|
ImGui::NextColumn();
|
||||||
|
|
||||||
|
auto& cs = s_instance->m_worker.GetCallstack( data.callstack );
|
||||||
|
int fidx = 0;
|
||||||
|
int bidx = 0;
|
||||||
|
for( auto& entry : cs )
|
||||||
|
{
|
||||||
|
auto frameData = s_instance->m_worker.GetCallstackFrame( entry );
|
||||||
|
if( !frameData )
|
||||||
|
{
|
||||||
|
ImGui::Separator();
|
||||||
|
ImGui::Text( "%i", fidx++ );
|
||||||
|
ImGui::NextColumn();
|
||||||
|
char buf[32];
|
||||||
|
sprintf( buf, "%p", (void*)s_instance->m_worker.GetCanonicalPointer( entry ) );
|
||||||
|
ImGui::TextUnformatted( buf );
|
||||||
|
if( ImGui::IsItemClicked() )
|
||||||
|
{
|
||||||
|
ImGui::SetClipboardText( buf );
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::NextColumn();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const auto fsz = frameData->size;
|
||||||
|
for( uint8_t f=0; f<fsz; f++ )
|
||||||
|
{
|
||||||
|
const auto& frame = frameData->data[f];
|
||||||
|
auto txt = s_instance->m_worker.GetString( frame.name );
|
||||||
|
|
||||||
|
if( fidx == 0 && f != fsz-1 )
|
||||||
|
{
|
||||||
|
auto test = s_tracyStackFrames;
|
||||||
|
bool match = false;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if( strcmp( txt, *test ) == 0 )
|
||||||
|
{
|
||||||
|
match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while( *++test );
|
||||||
|
if( match ) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bidx++;
|
||||||
|
|
||||||
|
ImGui::Separator();
|
||||||
|
if( f == fsz-1 )
|
||||||
|
{
|
||||||
|
ImGui::Text( "%i", fidx++ );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TextDisabledUnformatted( "inline" );
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
{
|
||||||
|
ImGui::PushTextWrapPos( 0.0f );
|
||||||
|
if( txt[0] == '[' )
|
||||||
|
{
|
||||||
|
TextDisabledUnformatted( txt );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImGui::TextUnformatted( txt );
|
||||||
|
}
|
||||||
|
ImGui::PopTextWrapPos();
|
||||||
|
}
|
||||||
|
if( ImGui::IsItemClicked() )
|
||||||
|
{
|
||||||
|
ImGui::SetClipboardText( txt );
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
ImGui::PushTextWrapPos( 0.0f );
|
||||||
|
txt = s_instance->m_worker.GetString( frame.file );
|
||||||
|
if( frame.line == 0 )
|
||||||
|
{
|
||||||
|
TextDisabledUnformatted( txt );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImGui::TextDisabled( "%s:%i", txt, frame.line );
|
||||||
|
}
|
||||||
|
if( ImGui::IsItemClicked() )
|
||||||
|
{
|
||||||
|
ImGui::SetClipboardText( txt );
|
||||||
|
}
|
||||||
|
ImGui::PopTextWrapPos();
|
||||||
|
ImGui::NextColumn();
|
||||||
|
if( frameData->imageName.Active() )
|
||||||
|
{
|
||||||
|
TextDisabledUnformatted( s_instance->m_worker.GetString( frameData->imageName ) );
|
||||||
|
}
|
||||||
|
ImGui::NextColumn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::EndColumns();
|
||||||
|
ImGui::EndChild();
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if( ImGui::Button( "I understand" ) )
|
if( ImGui::Button( "I understand" ) )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user