[Lldb-commits] [lldb] 1e58e3e - [lldb][trace] Fix some minor bugs in the call tree

Walter Erquinigo via lldb-commits lldb-commits at lists.llvm.org
Wed Oct 19 00:44:55 PDT 2022


Author: Walter Erquinigo
Date: 2022-10-19T00:44:48-07:00
New Revision: 1e58e3e1e96096f2d8db759555cf5132c5860519

URL: https://github.com/llvm/llvm-project/commit/1e58e3e1e96096f2d8db759555cf5132c5860519
DIFF: https://github.com/llvm/llvm-project/commit/1e58e3e1e96096f2d8db759555cf5132c5860519.diff

LOG: [lldb][trace] Fix some minor bugs in the call tree

- We weren't truncating the output files
- We weren't considering the case in which we couldn't disassembly an
instruction.

Added: 
    

Modified: 
    lldb/source/Commands/CommandObjectThread.cpp
    lldb/source/Target/TraceDumper.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp
index 414acfb23ef9d..bfe85043f3703 100644
--- a/lldb/source/Commands/CommandObjectThread.cpp
+++ b/lldb/source/Commands/CommandObjectThread.cpp
@@ -2199,7 +2199,8 @@ class CommandObjectTraceDumpFunctionCalls : public CommandObjectParsed {
     llvm::Optional<StreamFile> out_file;
     if (m_options.m_output_file) {
       out_file.emplace(m_options.m_output_file->GetPath().c_str(),
-                       File::eOpenOptionWriteOnly | File::eOpenOptionCanCreate);
+                       File::eOpenOptionWriteOnly | File::eOpenOptionCanCreate |
+                           File::eOpenOptionTruncate);
     }
 
     m_options.m_dumper_options.forwards = true;
@@ -2395,7 +2396,8 @@ class CommandObjectTraceDumpInstructions : public CommandObjectParsed {
     llvm::Optional<StreamFile> out_file;
     if (m_options.m_output_file) {
       out_file.emplace(m_options.m_output_file->GetPath().c_str(),
-                       File::eOpenOptionWriteOnly | File::eOpenOptionCanCreate);
+                       File::eOpenOptionWriteOnly | File::eOpenOptionCanCreate |
+                           File::eOpenOptionTruncate);
     }
 
     if (m_options.m_continue && !m_last_id) {

diff  --git a/lldb/source/Target/TraceDumper.cpp b/lldb/source/Target/TraceDumper.cpp
index 7a5214d7cff0f..268dc039365f7 100644
--- a/lldb/source/Target/TraceDumper.cpp
+++ b/lldb/source/Target/TraceDumper.cpp
@@ -799,9 +799,14 @@ static TraceDumper::FunctionCall &AppendInstructionToFunctionCallForest(
   }
   // Now we are in a 
diff erent symbol. Let's see if this is a return or a
   // call
-  switch (last_function_call->GetLastTracedSegment()
-              .GetLastInstructionSymbolInfo()
-              .instruction->GetControlFlowKind(&exe_ctx)) {
+  const InstructionSP &insn = last_function_call->GetLastTracedSegment()
+                                  .GetLastInstructionSymbolInfo()
+                                  .instruction;
+  InstructionControlFlowKind insn_kind =
+      insn ? insn->GetControlFlowKind(&exe_ctx)
+           : eInstructionControlFlowKindOther;
+
+  switch (insn_kind) {
   case lldb::eInstructionControlFlowKindCall:
   case lldb::eInstructionControlFlowKindFarCall: {
     // This is a regular call


        


More information about the lldb-commits mailing list