1
- import glob
2
1
import json
3
2
import os
4
3
import re
5
- import shutil
6
4
7
5
import lldb
8
6
from lldbsuite .test .decorators import *
@@ -181,7 +179,6 @@ def test_default_no_run(self):
181
179
"totalDebugInfoParseTime" ,
182
180
"totalDwoFileCount" ,
183
181
"totalLoadedDwoFileCount" ,
184
- "totalDwoErrorCount" ,
185
182
]
186
183
self .verify_keys (debug_stats , '"debug_stats"' , debug_stat_keys , None )
187
184
if self .getPlatform () != "windows" :
@@ -294,7 +291,6 @@ def test_default_with_run(self):
294
291
"totalDebugInfoParseTime" ,
295
292
"totalDwoFileCount" ,
296
293
"totalLoadedDwoFileCount" ,
297
- "totalDwoErrorCount" ,
298
294
]
299
295
self .verify_keys (debug_stats , '"debug_stats"' , debug_stat_keys , None )
300
296
stats = debug_stats ["targets" ][0 ]
@@ -335,7 +331,6 @@ def test_memory(self):
335
331
"totalDebugInfoByteSize" ,
336
332
"totalDwoFileCount" ,
337
333
"totalLoadedDwoFileCount" ,
338
- "totalDwoErrorCount" ,
339
334
]
340
335
self .verify_keys (debug_stats , '"debug_stats"' , debug_stat_keys , None )
341
336
@@ -390,7 +385,6 @@ def test_modules(self):
390
385
"totalDebugInfoByteSize" ,
391
386
"totalDwoFileCount" ,
392
387
"totalLoadedDwoFileCount" ,
393
- "totalDwoErrorCount" ,
394
388
]
395
389
self .verify_keys (debug_stats , '"debug_stats"' , debug_stat_keys , None )
396
390
stats = debug_stats ["targets" ][0 ]
@@ -413,7 +407,6 @@ def test_modules(self):
413
407
"symbolTableSavedToCache" ,
414
408
"dwoFileCount" ,
415
409
"loadedDwoFileCount" ,
416
- "dwoErrorCount" ,
417
410
"triple" ,
418
411
"uuid" ,
419
412
]
@@ -504,7 +497,6 @@ def test_breakpoints(self):
504
497
"totalDebugInfoByteSize" ,
505
498
"totalDwoFileCount" ,
506
499
"totalLoadedDwoFileCount" ,
507
- "totalDwoErrorCount" ,
508
500
]
509
501
self .verify_keys (debug_stats , '"debug_stats"' , debug_stat_keys , None )
510
502
target_stats = debug_stats ["targets" ][0 ]
@@ -663,113 +655,6 @@ def test_dwp_dwo_file_count(self):
663
655
self .assertEqual (debug_stats ["totalDwoFileCount" ], 2 )
664
656
self .assertEqual (debug_stats ["totalLoadedDwoFileCount" ], 2 )
665
657
666
- @add_test_categories (["dwo" ])
667
- def test_dwo_missing_error_stats (self ):
668
- """
669
- Test that DWO missing errors are reported correctly in statistics.
670
- This test:
671
- 1) Builds a program with split DWARF (.dwo files)
672
- 2) Delete all two .dwo files
673
- 3) Verify that 2 DWO errors are reported in statistics
674
- """
675
- da = {
676
- "CXX_SOURCES" : "dwo_error_main.cpp dwo_error_foo.cpp" ,
677
- "EXE" : self .getBuildArtifact ("a.out" ),
678
- }
679
- # -gsplit-dwarf creates separate .dwo files,
680
- # Expected output: dwo_error_main.dwo (contains main) and dwo_error_foo.dwo (contains foo struct/function)
681
- self .build (dictionary = da , debug_info = "dwo" )
682
- self .addTearDownCleanup (dictionary = da )
683
- exe = self .getBuildArtifact ("a.out" )
684
-
685
- # Remove the two .dwo files to trigger a DWO load error
686
- dwo_files = glob .glob (self .getBuildArtifact ("*.dwo" ))
687
- for dwo_file in dwo_files :
688
- os .rename (dwo_file , dwo_file + ".bak" )
689
-
690
- target = self .createTestTarget (file_path = exe )
691
- debug_stats = self .get_stats ()
692
-
693
- # Check DWO load error statistics are reported
694
- self .assertIn ("totalDwoErrorCount" , debug_stats )
695
- self .assertEqual (debug_stats ["totalDwoErrorCount" ], 2 )
696
-
697
- # Since there's only one module, module stats should have the same count as total count
698
- self .assertIn ("dwoErrorCount" , debug_stats ["modules" ][0 ])
699
- self .assertEqual (debug_stats ["modules" ][0 ]["dwoErrorCount" ], 2 )
700
-
701
- # Restore the original .dwo file
702
- for dwo_file in dwo_files :
703
- os .rename (dwo_file + ".bak" , dwo_file )
704
-
705
- @add_test_categories (["dwo" ])
706
- def test_dwo_id_mismatch_error_stats (self ):
707
- """
708
- Test that DWO ID mismatch errors are reported correctly in statistics.
709
- This test:
710
- 1) Builds a program with split DWARF (.dwo files)
711
- 2) Change one of the source file content and rebuild
712
- 3) Replace the new .dwo file with the original one to create a DWO ID mismatch
713
- 4) Verifies that a DWO error is reported in statistics
714
- 5) Restores the original source file
715
- """
716
- da = {
717
- "CXX_SOURCES" : "dwo_error_main.cpp dwo_error_foo.cpp" ,
718
- "EXE" : self .getBuildArtifact ("a.out" ),
719
- }
720
- # -gsplit-dwarf creates separate .dwo files,
721
- # Expected output: dwo_error_main.dwo (contains main) and dwo_error_foo.dwo (contains foo struct/function)
722
- self .build (dictionary = da , debug_info = "dwo" )
723
- self .addTearDownCleanup (dictionary = da )
724
- exe = self .getBuildArtifact ("a.out" )
725
-
726
- # Find and make a backup of the original .dwo file
727
- dwo_files = glob .glob (self .getBuildArtifact ("*.dwo" ))
728
-
729
- original_dwo_file = dwo_files [1 ]
730
- original_dwo_backup = original_dwo_file + ".bak"
731
- shutil .copy2 (original_dwo_file , original_dwo_backup )
732
-
733
- target = self .createTestTarget (file_path = exe )
734
- initial_stats = self .get_stats ()
735
- self .assertIn ("totalDwoErrorCount" , initial_stats )
736
- self .assertEqual (initial_stats ["totalDwoErrorCount" ], 0 )
737
- self .dbg .DeleteTarget (target )
738
-
739
- # Get the original file size before modification
740
- source_file_path = self .getSourcePath ("dwo_error_foo.cpp" )
741
- original_size = os .path .getsize (source_file_path )
742
-
743
- try :
744
- # Modify the source code and rebuild
745
- with open (source_file_path , "a" ) as f :
746
- f .write ("\n void additional_foo(){}\n " )
747
-
748
- # Rebuild and replace the new .dwo file with the original one
749
- self .build (dictionary = da , debug_info = "dwo" )
750
- shutil .copy2 (original_dwo_backup , original_dwo_file )
751
-
752
- # Create a new target and run to a breakpoint to force DWO file loading
753
- target = self .createTestTarget (file_path = exe )
754
- debug_stats = self .get_stats ()
755
-
756
- # Check that DWO load error statistics are reported
757
- self .assertIn ("totalDwoErrorCount" , debug_stats )
758
- self .assertEqual (debug_stats ["totalDwoErrorCount" ], 1 )
759
-
760
- # Since there's only one module, module stats should have the same count as total count
761
- self .assertIn ("dwoErrorCount" , debug_stats ["modules" ][0 ])
762
- self .assertEqual (debug_stats ["modules" ][0 ]["dwoErrorCount" ], 1 )
763
-
764
- finally :
765
- # Remove the appended content
766
- with open (source_file_path , "a" ) as f :
767
- f .truncate (original_size )
768
-
769
- # Restore the original .dwo file
770
- if os .path .exists (original_dwo_backup ):
771
- os .unlink (original_dwo_backup )
772
-
773
658
@skipUnlessDarwin
774
659
@no_debug_info_test
775
660
def test_dsym_binary_has_symfile_in_stats (self ):
0 commit comments